Lzp729@Blog
道法自然
Browse: Home / 泛型编程

泛型编程

C++知识整理 (12) 模板与泛型编程

By lzp729 on June 22, 2009

函数模板的定义
template <typename T> T foo(const T&, const & int);
函数模板的参数表不能为空, 可以包含类型参数和非类型参数.
内联inline放在templace<>后.
类模板的定义template <typename T> class test;
使用类模板时必须显示指定模板参数, 如test<int>.
模板形参的类型参数名T会屏蔽外围域同名.
模板声明要加template, 同一模板的声明和定义中形参名字不必相同.
typename另外一个作用是显示指定使用嵌套依赖类型
eg:

template <typename T1>class T2
{
public:
typename T1::nested_type_in_T1 foo(){}
}

此时由typename修饰的T1::nested_type_in_T1被显示指定为一个类型, 否则C++默认会认为nested_type_in_T1是T1内的一个数据成员.
另外在嵌套依赖类型作为被继承的类型时, 不需要typename显式指定, 原因很简单, 因为只有类型才能被继承, 所以C++默认会认为他是一个嵌套依赖类型, 而不是嵌套依赖成员.
模板非类型参数被函数当做常量处理.

template <typename T, int N> void foo(T,N)
{
T a[N];
}

模板实参推演

模板的多个类型形参必须与实参完全匹配.
实参转换为类型形参是受限转换, 否则将创建新的实例, 支持的转换有两种: 1. const转换: 用非const引用或指针匹配const引用或指针. [...]

Posted in C++知识整理 | Tagged C++, 模板, 泛型编程, 知识整理 | Leave a response

C++知识整理 (11) 面向对象编程与泛型编程

By lzp729 on June 21, 2009

OOP 通过封装, 继承和动态绑定实现.
多态仅用于通过继承而相关的类型的引用或指针.
基类希望派生类重定义的函数应定义为virtual, 于是该函数拥有了多态的能力.
通过基类的引用或指针调用虚函数时, 发生动态绑定.
继承: class derived : access_label base
派生类一般会重定义所继承的虚函数, 如果没有重定义某虚函数, 则使用基类的函数, 基类中定义的virtual函数将一直是虚, 即使派生类在重定义时无virtual关键字. 类外实现virtual函数时不加virtual关键字.
基类必须完整定义后才能作为基类, 派生关系的声明是错误的.
class Base; class Derived : public Base; // 错
class Base: class Derived; //对
动态绑定发生的两个条件: 1. 虚函数才能动态. 2. 基类的指针或引用.
多态性对对象无效, 仅对指针或引用有效.
可用域限定符强制使用虚函数.

class Base;
class Derived;
Base * pb = &derived;
pb ->Base::VF(); // 显式调用基类虚函数

虚函数默认实参在编译时确定, 通过基类或派生类的引用或指针调用虚函数时, 虚函数的默认实参为基类或派生类中指定的值. 若基类或派生类中同一虚函数默认实参值不同, 那么在通过基类指针或引用调用虚函数时, 基类的实参会传递给派生类实参.

#include <cstdlib>
#include <iostream>
 
using namespace std;
 
class X
{
public:
[...]

Posted in C++知识整理 | Tagged C++, 泛型编程, 知识整理, 面向对象 | Leave a response

泛型编程

  • C++知识整理 (12) 模板与泛型编程
  • C++知识整理 (11) 面向对象编程与泛型编程

Copyright © 2012 Lzp729@Blog.

Powered by WordPress and Hybrid, Theme By Lzp729.

RSS feed Site Map