C++初级之基本知识
2010-11-02 08:59:37 来源:WEB开发网21. 在基类构造函数中调用的虚拟实例总是在基类中活动的虚拟实例(基类本身定义的虚函数)。实际上,在基类构造函数中,派生类对象只不过是一个基类类型的对象。而已对于派生类对象在基类析构函数中也是如此;派生类部分也是未定义的,但是这一次不是因为它还没有被构造,而是因为它已经被销毁
22. 运算符重载规则:1)插在运算符(),[],->,=的函数一定要声明为类的成员。2)假定某个类,例如OpOverClass,装载运算符op,则a)若op最左边的操作数是一个不同类型的类对象时,op的函数一定要作为非成员――即类的友员。
b)若重载运算符op是类的成员函数,当op用于OpOverClass类型的对象时,op最左边的操作数必须是OpOverClass类型(对象或是引用)。因此<<和>>只能重载成为类的友员函数。
23. 运算符函数是带有返回值的函数。双目运算符作为类的成员时仅有一个参数,另一个就是类自身(this);作为友员存在时必须有两个参数。单目运算符作为类成员时,没有参数;作为友员时有一个参数。
24. 模板语法:
template <class Type>
declaration;
其中,Type是用户定义的标识符,它作为参数传递类型(数据类型),declaration是类或是函数,模板头中的class用来引用任意用户定义或是内建的数据类型。
template <class Type>
funcType cType<Type>::func(paremeters)
其中,cType是类模板, func是类cType的成员函数。funcType是函数类型,如void。
cType<int> x; 声明x是cType类型的对象,参数类型为int。
25. 函数模板的类型由实际调用时,传递的实际参数的类型确定。类模板的类型必须在使用模板定义对象时确定。由于在模板内部可能会使用传入的类型来定义变量,显然传入的参数不能是引用类型,引用无法定义变量。
26. 由于给模板传递参数是在编译时发生的,而类的实参是在用户编写的代码中指定的,并且若没有实参数传递给模板的话,编译器不能实例化函数模板。因此,不能在没有用户代码的情况下,单独编译模板的实现文件。常见方法:把类模本的定义和实现放在同一个文件中。
27. C++前置增量运算符和后置增量运算符的函数原型:
//////////////前置增量运算符
ClassName operator++(); //定义
//////////////////////实现
ClassName ClassName ::operator++(){
//increment
return *this;
}
///////////////////后置增量运算符
ClassName operator++(int); //定义,这里的int仅为了让编译器能够识别两者
/////////////////////实现
ClassName ClassName ::operator++(int){
ClassName temp = *this; //key, 新实例化一个类对象,影响效率
///increment
更多精彩
赞助商链接