C++的私有继承、公有继承和保护继承

#include <iostream>

using namespace std;

class Animal
{
    protected:
        int test;
        void sleep(){cout << "animal sleep...\n";}
    public:
    Animal(){ test = 0; cout << "animal init...\n";}
    void eat(){cout << "Animal eat..." << endl;}
};

class Giraffe: private Animal
{
    public:
        Giraffe(){cout << "giraffe init...\n";}
        void StrechNeck(double)
        {
            eat();
             sleep();
            cout << "test: "<<test << endl;
            cout << "strech neck \n"<<endl;
        }
};

class dog: protected Animal
{
    public:
        dog(){cout << "dog init...\n";}
        void run(double)
        {
            cout << "dog run start .... \n";
            eat();
             sleep();
            cout << "test: "<<test << endl;
            cout << "dog run end .... \n";
        }
};

class Cat: public Animal
{
    public:
    Cat(){cout << "cat init...\n";}
   // void eat(){cout << "cat eat ...\n";}
    void Meaw(){
        eat();
        sleep();
        cout << "meaw\n";}
};

void Func(Animal& an)
{
    an.eat();
}
int main()
{
    Cat dao;
    Giraffe gir;
    dog dg;
    Func(dao);
    //Func(dg);//error
    dao.Meaw();
    dg.run(11);
    //dao.sleep();  //error
    cout << "==========================\n";
    gir.StrechNeck(12);
   // Func(gir); //error
    return 0;
}

运行结果:

C++的私有继承、公有继承和保护继承

总结:

1. 不管是私有继承还是公有继承都无法访问父类的私有成员;

2. 公有继承的子类对象,可以直接访问父类的public的成员,就如同访问自己的成员一样;

3. 私有继承的子类对象,不能直接访问父类的任何成员;

4. 私有继承的子类对象,如果想要访问父类成员,只能通过子类的成员函数来访问父类的成员,就如同父类成员函数访问自己的成员(当然,父类的private成员无法访问)。

5. 保护继承与私有继承类似,继承之后的类相对于父类是独立的;其类对象,在公开场合无法使用基类的成员,也只能通过自己的成员函数来访问父类的protected和public成员。

下面分类说明:

(一)公有继承

1. 基类成员对派生类的可见性 对于 派生类来说,基类的公有成员和保护成员可见,私有成员不可见;

2. 基类成员对于派生类对象的可见性 对于 派生类对象来说,派生类对象 可以访问基类的公有成员,派生类的成员函数可以访问基类的公有成员和保护成员。

(二)私有继承

1. 基类成员对于派生类的可见性 对 派生类 来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能够被这个派生类的子类所访问;基类的私有成员是不可访问的;

2. 基类成员对于派生类对象的可见性来说,基类的所有成员都不可见。

(三)保护继承

1. 基类成员对于派生类的可见性 对 派生类 来说,基类的公有成员和保护成员是可见的,基类的公有成员和保护成员都作为派生类的私有成员,并且不能够被这个派生类的子类所访问;基类的私有成员是不可访问的;

2. 基类成员对于派生类对象的可见性来说,基类的所有成员都不可见。

所以,私有继承和保护继承的派生类,其子类均无法访问基类成员,导致基类无法再往下继承。

版权声明:本文为博主原创文章,未经博主允许不得转载。

原文链接: https://www.cnblogs.com/wangicter/archive/2012/06/28/4767342.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++的私有继承、公有继承和保护继承

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/53788

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午5:04
下一篇 2023年2月9日 上午5:09

相关推荐