C++总结之二(类的继承)

顾名思义,private/public/protected 分别表示 私有/公开/保护,它们是一组用于访问权限控制的关键字。那么首先,需要澄清的一个关键点是,是要控制谁访问谁的权限?这个访问的主语(施事)是谁?宾语(受事)是谁?

我们经常听到这样的说法:

1)一个类友元可以访问该类的任何成员(包括成员变量及成员方法,下同)。
2)private成员只有该类自身可以访问,protected成员只有该类及其派生类可以访问,public成员所有的人都可以访问。

宾语(受事)是谁这一点很明确,是类的成员(包括成员变量及成员方法)。主语(施事)是谁?这是让大家发生混淆的关键点。也是这个说法中含糊不清的地方。

想清楚一点,其实主语(施事)指的是一个函数,而不是(当然更不是变量)。private/public/protected要控制的是一个函数(施事)对一个类的成员(包括成员变量及成员方法)的访问权限。因此比较完整的说法是:

1)一个类友元(包含友元函数或者友元类的所有成员函数)可以访问该类的任何成员(包括成员变量及成员方法)。

2)除去友元外,private成员只有该类自身的成员函数可以访问,protected成员只有该类的成员函数及其派生类的成员函数可以访问,public成员则所有的函数都可以访问。

也就是说,当我们说一个类可以访问XXX,其实暗指这个类的成员函数可以访问XXX。了解了这一点,外加一条显而易见的规则,上面的问题就不难回答了。这条规则是:

3)派生类在继承时可削弱成员的访问权限(通过protected/private修饰)。例如上面的例子class P : protected O {…}; 那么某个函数通过类P访问O中成员时,该函数对类O中的public成员只有protected权限。

VC++的继承使可以多向继承的(也就是它可以同时认几个父亲),基类和派生类之间的关系:
1。Class SunClass : BaseClass
2. Class SunClass : protect BaseClass
3. Class SunClass : private BaseClass
4. Class SunClass : Public  BaseClass

首先要说的是派生类可以继承基类的公共成员和保护成员,私有成员、构造函数、析构函数不继承。
第一种继承: 缺省 ,为private继承
第二种保护继承:保护成员和公有成员全部变成保护成员
第三种私有继承:保护成员和公有成员全部变成私有成员 (儿子比老子小气,统统不让别人访问)
第四种公开继承:嘿嘿!这下可不是保护和公有统统变成公共成员,这里是原封不动,保护依旧是保护,公开依旧是公开。 (公开继承,就是拷贝不走样)

好了,继承完了,接下来可以做自己的东西了,可以做什么呢?可以添加自己的变量和函数。站在巨人的肩膀上完成自己更高一级的功能了!

  • 构造函数和析构函数,这叫专项函数,规定没有返回值,连void都没有,给编译器调用的,编译器才不需要返回值呢。

构造函数就是和类同名的函数,作用就是在调用类时自动的初始化,只要该类的变量被创建,首先就是调用构造函数,通常我很少写具体的代码在里面,偶尔根据需要些写变量的赋值。

但是构造函数也可以overload,也可以带参数,一旦有了超过一个以上的构造函数,则必须在调用的时候指名参数。

析购则是反过来,销毁对象的时候被调用,你不希望外泄的数据都可以写在这里。析购是不可以overload的,也没有参数和返回值。构造函数分配的堆的内存空间,都要在析购函数里用delete释放掉,不然你的程序会很占资源。

构造函数的初始化表达式表:
构造函数(参数) 初始化表 {函数体}

1。如果是派生类:在初始化表里掉用基类的构造函数。

CSonClass:: CSonClass (参数) : CBaseClass(参数)
{
派生类的构造函数体
}

  • 如何在一个类里定义另一个带参数的类?
    由于类是一个抽象的东西,它不能分配空间,所以当有另外一个带参数的类做它的子成员时,
    无法把具体的参数给它,那么怎么办?
    嘿嘿!在构造函数里面打主意! 构造函数名后打冒号,再把调用的类和它的参数写上,瞧,
    就像下面这样做:

Class AAA{

AAA (char * 参数): BBB(参数)
{...}

}
看见没有,就是这样,在AAA这个构造函数后加冒号,再把BBB类和它的参数写上,哈哈,大功告成!
成功编译。

posted on 2010-03-24 21:31  袁婉轩  阅读(366)  评论(0编辑  收藏  举报

导航