您的位置:首页 > 编程语言 > C语言/C++

C++有关继承的一点总结

2013-11-25 10:32 423 查看
C++有关继承的一点总结
Last Edit 2013/11/25
1、派生类到底干了些什么
一个类从基类派生过来,一般会出现三个事件:继承基类中的变量;继承基类中的函数;为本类添加新的成员变量和函数。
几点注意事项:
a.如果在派生类中声明了一个和基类某个成员同名的成员,那么派生类这个成员就会覆盖外层的同名成员。这叫做同名覆盖
b.派生类不会继承基类的构造函数和析构函数

2、访问控制:public,protected,private有什么区别
访问控制分为两种:派生类中新增成员对基类成员的访问控制;派生类对象对基类成员的访问控制。

a. public,即公有继承时,派生类对基类中的公有成员和保护成员的访问属性都不变,而对基类的私有成员则不能访问。
基类的公有成员和保护成员被继承到派生类中以后同样成为派生类的公有成员和保护成员,派生类中新增成员对他们可以直 接访问,派生类的对象只能访问继承的基类公有成员,不能访问保护成员。

b.protected, 在保护继承方式中,基类的公有成员和保护成员被派生类继承后变成派生类的保护成员,而基类的私有成员在派
生类中不能访问.因为保护继承后,基类中的公有成员和保护成员都不能直接去访问,应该在派生类声明就的成员函数去访问这 些保护成员。
c.private,私有继承完全屏蔽了基类成员,这对于派生类来说一点作用都没有。实际运用中不会使用这样的继承吧。
3、 派生类的构造函数

派生类名::派生类名(参数表):基类名1(参数表1),...基类名m(参数名m), 内嵌对象名(内嵌对象参数表1),..,内嵌对象名n(内嵌对象参数表n)

{

初始化派生类新成员的语句;

}


基类的构造函数若有参数,则派生类必须定义构造函数,将传入的参数再传递给基类的构造函数,对基类进行初始化。

4、有关成员的可见性
当一个类从多个直接基类继承,这些直接继承类又有共同的基类,那么就有可能出现成员可见性的问题。

在派生类内部访问基类同名成员的语法形式是:

基类名::数据成员名; // 数据成员

基类名::函数成员名(参数表); // 函数成员

如果是在派生类外通过派生类对象访问的话,前面还要加上“派生类对象名.”:

派生类对象名.基类名::数据成员名; // 数据成员

派生类对象名.基类名::函数成员名(参数表); // 函数成员

多继承可能会出现基类变量存在多份拷贝的情况,为了解决这个问题,使用虚基类。派生类直接基类的共同基类声明为虚基类后,派生类从不同的直接基类继承来的同名数据成员在内存中就会只有一份拷贝,同名函数也会只有一个映射,这样不仅实现了唯一标识同名成员,而且也节省了内存空间

class 派生类名:virtual 继承方式 基类名

#include <iostream>
        using namespace std;
        class Base0                    // 基类Base0的声明
        {
        public:
                  int x;
                  void show()      { cout<<"x of Base0: "<<x<<endl; }
        };
        class Base1 : virtual public Base0     // Base0为虚基类,公有派生Base1类
        {
        };
        class Base2 : virtual public Base0     // Base0为虚基类,公有派生Base2类
        {
        };
        class Child : public Base1, public Base2
        {
        };
        int main()
        {
                Child child;
                child.x = 5;
                child.show();
                return 0;
        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: