写点什么

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

作者:CtrlX
  • 2022 年 8 月 14 日
    山东
  • 本文字数:2271 字

    阅读完需:约 7 分钟

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

继承的基本语法

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


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


普通实现:


//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 子类 : 继承方式 父类


继承方式一共有三种:


  • 公共继承

  • 保护继承

  • 私有继承



示例:


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; }};
复制代码


用户头像

CtrlX

关注

Pain is inevitable,suffering is optional 2022.08.01 加入

【个人网站】ctrlx.life 【联系方式】微信:gitctrlx 【软件技能】前端,C++,Python,研究网络工程,数据结构与算法。

评论

发布
暂无评论
C++继承的基本语法与三种继承方式_c_CtrlX_InfoQ写作社区