摘要:1.如果函数的形参是指向非const型变量的指针,则实参只能用指向非const变量的指针,而不能指向const变量的指针,这样在执行函数的过程中可以改变形参指针变量所指向的值,如果函数的形参指向const型变量的指针,则在执行函数的过程中显然不能改变指针变量所指向变量的值,因此允许实参是指向const或者非const变量的指针。 2.在定义类对象的时候,如果对象指定为常对像,常对像的数据成员必须有初始值,即成员变量必须初始化。如过一个对象被声明为常对像,则不能调用该对象的非const型成员函数,除了由系统调用的隐式构造函数和析构函数。如果定义了一个const对象,只能调用其中的const...
阅读全文
摘要:多重继承中,一个基类可以在派生层次中出现多次,如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多分同名成员。C++提供虚基类的方法使得在继承间接共同基类时只保留一份成员。 1.通常,每个类至初始化自己的直接基类,在应用于虚基类的时候,这个初始化策略会失败。如果使用这个规则,则可能多次初始化虚基类。为了解决这个问题,从具有虚基类的类继承的类初始化进行特殊处理。在虚派生中,由最底层的派生类构造函数初始化虚基类。即使是最底层派生类的非直接虚基类,也在最底层的虚派生类中调用其构造函数。 2.无论虚基类出现在继承层次中的任何地方,总...
阅读全文
摘要:大多数应用程序使用单个基类的公用继承,但是在某些情况下,单继承是不够的,必须使用多继承,当然多继承也会带来很多的麻烦,下面列出了多继承的一些要点和注意事项。 1.基类的构造函数与按照派生类列表中出现的次序调用,析构函数的调用次序总是和构造函数的调用次序相反。 2.多重继承的情况下,遇到二义性的可能将会更大,编译器不会试图根据派生类转换区别基类间的转换,转换成每个基类都一样好,有如下代码:class ZooAnimal{};class Bear : public ZooAnimal{};class Endangered{};class Panda : public Bear, publi...
阅读全文
摘要:面向对象程序设计有4个主要特点:抽象,封装,继承,多态。如果没有掌握这些主要特点,就是没有掌握面向对象程序设计的真谛。下面归纳一下在面向对象编程中一些基本的要点和注意事项。 1.当基类派生出一个子类的时候,子类会继承基类的所有成员(包括私有成员),但是私有成员在子类中是不可访问的,而且基类中的宏定义,typedef定义语句在子类中都是不可见的,也就是说子类不会继承这种类型的变量,通过下面的代码我们可以看出来: class A{ typedef int* PINT;#define n 10private: int a; int b; public: double c;}...
阅读全文
摘要:通过重载运算符,程序员可以针对类类型的操作数定义不同的操作符版本,这给编程带来了极大的方便。下面给出运算符重载的要点和注意事项。 1.C++中不能被重载的运算符共有五个:.(成员访问运算符),.*(成员指针运算符),::(作用域运算符),?:(条件运算符),sizeof(长度运算符)。 2.重载运算符必须和用户自定义类型对象一起使用,其参数至少有一个是类对象(或者类对象的引用)。 3.用于类对象的运算符一般必须重载,但有两个例外,运算符“=”和“&”不必用户重载。 4.如果运算符左侧的操作数属于C++标准类型(如int),或者是一个其它类的类类型,则重载函数不能申明为成员函数,只能..
阅读全文
摘要:构造函数是特殊的成员函数,只要创建类类型对象,都要执行构造函数,构造函数的工作是保证每个对象的数据成员具有合适的初始值。下面将给出构造函数的特征和实用构造函数的注意事项。 1.构造函数不能申明为const,const构造函数是没有必要的。创建类类型的const对象时,运行一个普通构造函数来初始化该const对象,构造函数的工作是初始化对象,不管对象是否为const, 都用一个构造函数初始化。 2.有些成员必须在构造函数初始化列表中初始化。没有默认构造函数的类类型成员,以及const或引用类型成员,不管是哪种类型,都必须在构造函数初始化列表中初始化。可以初始化const对象或者引用类型对...
阅读全文
摘要:静态成员变量和静态数据成员并不属于某一个类对象,而是整个类,为所有对象共有,下面介绍静态成员变量和静态数据成员的一些特征: 1.静态成员变量的内存分配于全局区,不同于普通的成员变量,当用sizeof()计算类的大小的时候,静态成员变量是不算在里面的,有如下代码: class A { static int a; static int b; }; int _tmain(int argc, _TCHAR* argv[]) { printf("%d\n", sizeof(A)); return 0; } 结果如下: 2.当类的成员变量为const sta...
阅读全文
摘要:位运算应用口诀清零取反要用与,某位置一可用或若要取反和交换,轻轻松松用异或移位运算要点 1 它们都是双目运算符,两个运算分量都是整形,结果也是整形。 2 " < <" 左移:右边空出的位上补0,左边的位将从字头挤掉,其值相当于乘2。 3 ">>"右移:右边的位被挤掉。对于左边移出的空位,如果是正数则空位补0,若为负数,可能补0或补1,这取决于所用的计算机系统。 4 ">>>"运算符,右边的位被挤掉,对于左边移出的空位一概补上0。位运算符的应用 (源操作数s 掩码mask)(1) 按位与-- &
阅读全文