栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++核心编程(十九)继承的方式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++核心编程(十九)继承的方式

首先复习一下:
类中成员可以分为3种:
1)公有成员:可以在类内访问,也可以在类外访问(通过对象访问),子类和本类都可以访问;
2)保护成员:不可以类外访问,可以在子类或本类中访问
3)私有成员:不可以类外访问,不可以子类中访问,不可以对象访问,只能本类中访问;

(1)继承的方式:
1)公有继承
2)保护继承继承
3)私有继承

1)公有继承
1----子类成员可以访问父类的公有成员和保护成员
2 ----子类对象可以访问父类的公有成员
3----子类无法访问父类的私有成员
4----子类的子类可以访问父类的公有成员和保护成员(具体访问权限需要看子类和子类的子类的继承关系)
5----子类的子类无法访问父类的的私有成员
公有继承的例子如下:

#include
using namespace std;
class father
{
public:
        void father_public();
protected:
        void father_protected(); 
private:
        void father_private();
};

void father::father_public()
{
         cout<<"this is father_public"<
        cout<<"this is father_protected"<
         cout<<"this is father_private"<
public:
        void son_call_on_protected();
};

void son::son_call_on_protected()
{
    cout<<"son_son_call_on_public ";
    father_protected(); //可以访问father中的protected;
                        //father_private();仍然无法访问
}

void test_public_inherrit()
{
    father  father_obj;
            // father_obj.father_protected(); protected修饰的成员不能再外部访问,只能在类中访问

        son son_obj;
        son_obj.father_public();
            //    obj.father_protected();保护成员只能在本类和子类中被访问,不能在外部被访问
            //     son_obj.father_private();父类的私有成员子类无法直接访问,父类的私有成员只能被父类的成员访问。
        son_obj.son_call_on_protected();
}

int main()
{
   test_public_inherrit();
}

2)保护继承
1----子类对象无法访问父类
2----子类成员可以访问父类的公有成员和保护成员
3----子类无法访问父类的私有成员 (无论是成员访问还是对象访问都不行)
4----子类的子类可以通过子类的子类的成员访问父类的公有成员和保护成员
5----子类的子类无法访问父类的的私有成员 (无论是成员访问还是对象访问都不行)
例子:

#include
using namespace std;
class father
{
public:
        void father_public();
protected:
        void father_protected();
private:
        void father_private();
};
void father::father_public()
{
        cout<<"father_public"<
        cout<<"father_protected"<
        cout<<"father_private"<
public:
        void s_call_on_f_public_and_protected();
};

void son::s_call_on_f_public_and_protected()
{
        cout<<"this is son"<
public:
        void g_call_on_f_public_and_protected();
};

void grandson::g_call_on_f_public_and_protected()
{
        cout<<"this is grandson"<
        son son_obj;
             son_obj.s_call_on_f_public_and_protected();
        grandson g_son_obj;
             g_son_obj.g_call_on_f_public_and_protected();
        // son_obj.father_public();报错:通过对象访问father的公有成员
        //son_obj.father_protected();报错:通过对象访问father的保护成员
       // father_private();//报错:通过对象访问father的私有成员
}

3)私有继承
1----子类的成员可以访问父类的公有成员和保护成员
2----子类的对象不能访问父类的公有成员和保护成员(无论是成员访问还是对象访问都不行)
3----子类的子类不能访问子类的父类的成员,(无论是成员访问还是对象访问都不行)

例子:

#include
using namespace std;
class father
{
public:
        void father_public();
protected:
        void father_protected();
private:
        void father_private();
};
void father::father_public()
{
        cout<<"father_public"<
        cout<<"father_protected"<
        cout<<"father_private"<
public:
        void s_call_on_f_public_and_protected();
};

void son::s_call_on_f_public_and_protected()
{
        cout<<"this is son"<
public:
        void g_call_on_f_public_and_protected();
};

void grandson::g_call_on_f_public_and_protected()
{
        cout<<"this is grandson"<
        son son_obj;
             son_obj.s_call_on_f_public_and_protected();
        // son_obj.father_public();报错:通过对象访问father的公有成员
        //son_obj.father_protected();报错:通过对象访问father的保护成员
       // father_private();//报错:通过对象访问father的私有成员
       grandson g_son_obj;
             g_son_obj.g_call_on_f_public_and_protected();
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1004650.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号