1.如果未加格式限制,float f=1.0 用cout输出的结果为1.
2.若不定义拷贝构造函数,则编译器自动生成一个缺省的拷贝构造函数,它可能会产生一些问题:它会只拷贝类的存储区的内容,如果其中有引用的话,它是不拷贝的,这就造成了,两个类的实例引用了同一个对象。结果就是未知,什么都可能发生。尤其出错后,很难定位。
3.成员函数,全局函数,友元函数:
成员函数:可以访问类中的所有的成员,第一个参数隐含为this
全局函数:可以访问类中的公开成员
友元函数:可以访问类中所有成员的全局函数。
4.结构化编程和面向对象编程:结构化编程:把一个复杂的过程分解为子过程,子过程继续分解直到成为简单的过程;面向对象编程:把一个复杂的系统分解为若干个对象,有这些对象共同提供系统的功能。
5.如果一个类的默认构造函数是保护类型,则不可用new来创建新类型。如:class A{protect:A(){}}就不可用A a=new A;
6.struct和class都可以继承,包含成员函数,实现多态。但是struct默认的是public,class默认的是private。而且struct像是数据结构的实现体,而class像是对象的实现体。
7.有符号数和无符号数相加得无符号数
8.class Singleton
{
public:
static Singleton* GetInstance()
{
if(NULL ==_instance)
{
_instance=new Singleton();
}
return_instance;
}
protected:
Singleton(){};
static Singleton* _instance;
};
Singleton* Singleton::_instance=NULL;
系统中一定最多只存在该类的一个实例,对外接口函数是static的,而且默认构造函数是protect类型的。
9.枚举默认的首个值是0.
10.类C和类D,C是基类
C* pc = new D(1,2,3);delete pc;return 0;如果基类的析构函数是虚函数,则先调用D中的析构函数,再调用C中的析构函数;如果基类的析构不是虚函数则只调用C中的析构函数。
11.#include <stdio.h> void main( void ) { int a[4][3]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; int (*p)[3]=a;printf("%d\n",*((int *)p+1)+2);}结果是2+2=4
12. 虚析构函数也必须遵守调用层次惟一的原则;虚析构函数被调用时,只有成员函数的本地版本被调用;可以创建一个纯虚析构函数。
13.重载运算符的返回值类型一定不能使void。
14.一个const对象只能访问const函数。
15.宏定义中使用#,返回#跟着的字符串,如define PRINT(a) cout<<#a<<endl PRINT(10*10)宏定义是a前有#则输出10*10,没有则输出100