最近发现一个挺有意思的东西,一问一答http://wenda60.com/?/p>
我这水平也就敢冲一下c # 43; & # 43;了,下面是一些记录。
<强>默认这指针强>
这指针是一个特殊的指针,当类的某个非静态的成员函数在执行时,就会存在这指针。它指向类的一个对象,且这个对象的某个成员函数正在被调用。
这指针的名字始终是这样,而且总是作为隐含参数传递给每一个被声明的成员函数。
实际编程时函数的声明不需要包含这个参数。
当程序中调用某个对象的成员函数时,编译器会把该对象的地址加入到参数列表中。
静态成员函数不存在这指针。
当调用某个对象的成员函数时,编译器把对象的地址传递给这指针,然后再调用该函数,因此,成员函数你对任何成员的调用实际上都隐式地使用了这个指针。
<>强类的继承规则强>
派生类共有三种c # 43; & # 43;类继承方式:公有继承(公共),私有继承(私人),保护继承(保护)
公有继承(公共)
基类的公有成员和保护成员可以作为其派生类的公有成员和保护成员
派生类的成员函数可以访问基类中的公有成员和保护成员,无法访问基类中的私有成员
派生类的对象可以访问基类的公有成员
私有继承(私人)
基类的公有成员和保护成员都作为其派生类的私有成员
在私有继承时,基类的成员只能由直接派生类访问,而无法再往下继承
保护c # 43; & # 43;类继承(保护)
基类的所有公有成员和保护成员都成为派生类的保护成员
基类的公有成员和保护成员只能被它的直接派生类成员函数或友元访问
构造函数和析构函数不能被继承
因此构造派生类的对象时,需要对基类数据成员。新增数据成员和成员对象的数据成员进行初始化
派生类构造函数的参数表部分既需要包含子类某些数据成员的初始& # 20540;,也要包含基类的数据成员的初始& # 20540;
如果基类没有默认的构造函数,那么派生类必须具有给基类构造函数提供参数的构造函数
<强>数组指针和指针数组强>
- - - - - - - - - - - - - - - -指针- - - - - - - - - - - - - - - - -
=10 int, int * p
=,,
- - - - - - - - - - - - -指针的指针- - - - - - - - - - - -
int b=20;
int * p=, b; p2p=和
int * * p。
- - - - - - - - - - - - -简单数组- - - - - - - - - - - - - - - - - -
int c[10];//整数数组,含有10个整数元素
也就是说每一个元素都是整数
- - - - - - - - - - - - - - - -指针数组- - - - - - - - - - - - - - - - - - - - - -
int * p[10];//指针数组,含有10个指针元素
也就是说每一个元素都是指针
- - - - - - - - - - - - - - - -数组指针- - - - - - - - - - - - - - - - - - - - - -
int (* p)[10];//数组指针,这个指针可以用来指向
含有10个元素的整数数组
<强>虚基类强>
虚基类的作用从上面的介绍可知:如果一个派生类有多个直接基类,而这些直接基类又有一个共同的基类,则在最终的派生类中会保留该间接共同基类数据成员的多份同名成员。
在引用这些同名的成员时,必须在派生类对象名后增加直接基类名,以避免产生二义性,使其惟一地标识一个成员,如
c1。null