正文

《继承》学习笔记2006-10-17 21:04:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/colormoon/19436.html

分享到:

1.向已有的类添加了新功能后的类叫做原来类的派生,原来的类叫做新类的基类。通常基类有多个派生类。

派生类的声明语法:class Dog:public Mammal

基类必须最先声明。

2.成员变量有三种限定符:private(私有型)、public(公有型)、protected(保护型)。

保护型的变量不仅可以被自己的类所访问,也可以被该类所派生出的类的成员函数所访问。而私有成员变量只可以被自己类的成员函数访问。即使是派生类也不能访问他的基类的私有成员和函数。

3.创建派生类的对象时,首先调用基类的构造函数创建对象的基类部分,然后调用派生类的构造函数,创建派生类的部分构成整个派生对象。

删除派生类的对象时,首先调用派生类的析构函数,删除对象的派生部分,然后调用基类的析构函数,删除对象的基类部分。

4.派生类的构造函数调用基类的构造函数来初始化某些成员变量,若有的成员变量希望在派生类中初始化,而基类不做初始化,则可以重载基类的构造函数,即令基类只初始化部分成员变量,然后在派生类的构造函数中显式调用该重载的构造函数。(12.3.1节)

5.派生函数可以覆盖基类函数的实现,即在派生类函数中改变基类函数的实现。

当派生类用与基类成员函数相同的返回值和签名,但却用新的实现方法创建一个函数时,就称为覆盖了该方法。签名包括:函数名、参数表以及可能用到的关键字const。

规则:一旦覆盖了任一个重载方法,那么对这个方法的所有其他原基类函数均被隐藏了,如果不想让他们被隐藏,就必须把它们全部覆盖。

若仍想调用被覆盖的函数,那可以用域限定符(::),即基类::被覆盖的方法。

6.C++扩展了其多态性,允许把派生类的对象赋给指向基类的指针。如:

Mammal *pMammal=new Dog;

Dog是Mammal派生出来的一个类。这样,就可以用该指针调用Mammal类中的任何一个方法。若想调用被Dog覆盖掉的方法,则可以用虚函数来完成。

7.虚函数。在成员函数返回类型前加关键字virtual。表明该类将做为一个基类来派生其他类。

对于虚函数,并不需要在派生类中也定义为虚函数,但继续标记为虚函数是比较好的理解手段。

正确调用函数,对于6中的pMammal指针,调用基类的虚函数,若在派生类中覆盖了该函数,那么就调用覆盖函数,若没有覆盖,就调用基类的虚函数。但该指针不能调用Mammal中没有声明的函数,因为它是Mammal的指针,除非指针是指向Dog对象的指针。

8.一般的规律是:若类中任一个函数是虚函数,则析构函数也应是虚函数。

构造函数不能是虚函数。也没有虚复制构造函数。

若程序需要一个指向基对象的指针,解决办法是在基类中创建一个Clone()方法,并把它设置为虚函数。Clone()方法创建一个当前类的新的对象拷贝并返回这个对象。

virtural Mammal* Clone(){ return new Mammal(*this);}

阅读(2613) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册