开发者社区> CtrlX> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C++继承的基本语法与三种继承方式

简介: 继承的好处:==可以减少重复的代码== class A : public B; A 类称为子类 或 派生类 B 类称为父类 或 基类 派生类中的成员,包含两大部分: 一类是从基类继承过来的,一类是自己增加的成员。 从基类继承过过来的表现其共性,而新增的成员体现了其个性。 继承方式 继承的语法:class 子类 : 继承方式 父类 继承方式一共有三种: • 公共继承 • 保护继承 • 私有继承
+关注继续查看

title: C++继承的基本语法与三种继承方式

tags: CPP

categories:

  - Programming

  - CPP

cover: >-

  https://cdn.staticaly.com/gh/1438802682/image-hosting@master/hexoBlogCtrlCherry/jy5.mcd9y4hyiog.webp

abbrlink: eec960c5

date: 2022-08-14 19:30:59


继承的基本语法

例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同

接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处

普通实现:

//Java页面

class Java

{

public:

    void header()

    {

        cout << "首页、公开课、登录、注册...(公共头部)" << endl;

    }

    void footer()

    {

        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;

    }

    void left()

    {

        cout << "Java,Python,C++...(公共分类列表)" << endl;

    }

    void content()

    {

        cout << "JAVA学科视频" << endl;

    }

};

//Python页面

class Python

{

public:

    void header()

    {

        cout << "首页、公开课、登录、注册...(公共头部)" << endl;

    }

    void footer()

    {

        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;

    }

    void left()

    {

        cout << "Java,Python,C++...(公共分类列表)" << endl;

    }

    void content()

    {

        cout << "Python学科视频" << endl;

    }

};

//C++页面

class CPP

{

public:

    void header()

    {

        cout << "首页、公开课、登录、注册...(公共头部)" << endl;

    }

    void footer()

    {

        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;

    }

    void left()

    {

        cout << "Java,Python,C++...(公共分类列表)" << endl;

    }

    void content()

    {

        cout << "C++学科视频" << endl;

    }

};

void test01()

{

    //Java页面

    cout << "Java下载视频页面如下: " << endl;

    Java ja;

    ja.header();

    ja.footer();

    ja.left();

    ja.content();

    cout << "--------------------" << endl;

    //Python页面

    cout << "Python下载视频页面如下: " << endl;

    Python py;

    py.header();

    py.footer();

    py.left();

    py.content();

    cout << "--------------------" << endl;

    //C++页面

    cout << "C++下载视频页面如下: " << endl;

    CPP cp;

    cp.header();

    cp.footer();

    cp.left();

    cp.content();

}

int main() {

    test01();

    system("pause");

    return 0;

}

继承实现:

//公共页面

class BasePage

{

public:

    void header()

    {

        cout << "首页、公开课、登录、注册...(公共头部)" << endl;

    }

    void footer()

    {

        cout << "帮助中心、交流合作、站内地图...(公共底部)" << endl;

    }

    void left()

    {

        cout << "Java,Python,C++...(公共分类列表)" << endl;

    }

};

//Java页面

class Java : public BasePage

{

public:

    void content()

    {

        cout << "JAVA学科视频" << endl;

    }

};

//Python页面

class Python : public BasePage

{

public:

    void content()

    {

        cout << "Python学科视频" << endl;

    }

};

//C++页面

class CPP : public BasePage

{

public:

    void content()

    {

        cout << "C++学科视频" << endl;

    }

};

void test01()

{

    //Java页面

    cout << "Java下载视频页面如下: " << endl;

    Java ja;

    ja.header();

    ja.footer();

    ja.left();

    ja.content();

    cout << "--------------------" << endl;

    //Python页面

    cout << "Python下载视频页面如下: " << endl;

    Python py;

    py.header();

    py.footer();

    py.left();

    py.content();

    cout << "--------------------" << endl;

    //C++页面

    cout << "C++下载视频页面如下: " << endl;

    CPP cp;

    cp.header();

    cp.footer();

    cp.left();

    cp.content();

}

int main() {

    test01();

    system("pause");

    return 0;

}

总结:

继承的好处:==可以减少重复的代码==

class A : public B;

A 类称为子类 或 派生类

B 类称为父类 或 基类

派生类中的成员,包含两大部分

一类是从基类继承过来的,一类是自己增加的成员。

从基类继承过过来的表现其共性,而新增的成员体现了其个性。

继承方式

继承的语法:class 子类 : 继承方式 父类

继承方式一共有三种:

  • 公共继承
  • 保护继承
  • 私有继承

image

示例:

class Base1

{

public

    int m_A;

protected:

    int m_B;

private:

    int m_C;

};

//公共继承

class Son1 :public Base1

{

public:

    void func()

    {

        m_A = 10; //可访问 public权限,父类中的公共权限到了子类中依然是公共权限。

        m_B = 10; //可访问 protected权限,父类中的公共权限到了子类中依然是公共权限。

        //m_C; //不可访问

    }

};

void myClass()

{

    Son1 s1;

    s1.m_A; //其他类只能访问到公共权限

   //s1.m_B;报错,到Son1中 m_B是保护权限 类外访问不到

}

//保护继承

class Base2

{

public:

    int m_A;

protected:

    int m_B;

private:

    int m_C;

};

class Son2:protected Base2

{

public:

    void func()

    {

        m_A = 10; //可访问 protected权限

        m_B = 10; //可访问 protected权限

        //m_C = 10; //不可访问

    }

};

void myClass2()

{

    Son2 s;

    //s.m_A; //不可访问

}

//私有继承

class Base3

{

public:

    int m_A;

protected:

    int m_B;

private:

    int m_C;

};

class Son3:private Base3

{

public:

    void func()

    {

        m_A = 100; //可访问 private权限

        m_B = 100; //可访问 private权限

        //m_C = 100; //不可访问

    }

};

class GrandSon3 :public Son3

{

public:

    void func()

    {

        //Son3是私有继承,所以继承Son3的属性在GrandSon3中都无法访问到Son3中的private成员

        //m_A;

        //m_B;

        //m_C;

    }

};


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
matplotlib的基本图表配置之plot的使用(三)
matplotlib的基本图表配置之plot的使用
18 0
Spring Cloud(七)《基于RabbitMQ消息总线方式刷新配置服务》
在微服务架构中,为了更方便的向微服务实例广播消息,我们通常会构建一个消息中心,让所有的服务实例都连接上来,而该消息中心所发布的消息都会被微服务实例监听和消费,我们把这种机制叫做消息总线(SpringCloud Bus)
64 0
第2章 Kotlin 语法基础
第2章 Kotlin 语法基础 人与人之间通过语言来交流沟通,互相协作。人与计算机之间怎样“交流沟通”呢?答案是编程语言。一门语言有词、短语、句子、文章等,对应到编程语言中就是关键字、标识符、表达式、源代码文件等。
1184 0
UIActionSheet,UIAlertView技术分享
UIActionSheet #import "FirstViewController.h" @interface FirstViewController () @property (retain, nonatomic) IBOutlet UILabel *aLabel...
863 0
Kotlin语法(基础)
一、基础语法: 1. 定义包名: 包名应该在源文件的最开头,包名不必和文件夹路径一致:源文件可以放在任意位置。 package my.demo 2. 定义函数: fun sum(a: Int , b: Int) : Int{   return a + b } 表达式函数体自动推断型的返回值: fun...
697 0
+关注
CtrlX
【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。
31
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载