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页面

classJava

{

public:

   voidheader()

   {

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

   }

   voidfooter()

   {

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

   }

   voidleft()

   {

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

   }

   voidcontent()

   {

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

   }

};

//Python页面

classPython

{

public:

   voidheader()

   {

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

   }

   voidfooter()

   {

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

   }

   voidleft()

   {

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

   }

   voidcontent()

   {

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

   }

};

//C++页面

classCPP

{

public:

   voidheader()

   {

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

   }

   voidfooter()

   {

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

   }

   voidleft()

   {

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

   }

   voidcontent()

   {

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

   }

};

voidtest01()

{

   //Java页面

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

   Javaja;

   ja.header();

   ja.footer();

   ja.left();

   ja.content();

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

   //Python页面

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

   Pythonpy;

   py.header();

   py.footer();

   py.left();

   py.content();

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

   //C++页面

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

   CPPcp;

   cp.header();

   cp.footer();

   cp.left();

   cp.content();

}

intmain() {

   test01();

   system("pause");

   return0;

}

继承实现:

//公共页面

classBasePage

{

public:

   voidheader()

   {

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

   }

   voidfooter()

   {

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

   }

   voidleft()

   {

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

   }

};

//Java页面

classJava : publicBasePage

{

public:

   voidcontent()

   {

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

   }

};

//Python页面

classPython : publicBasePage

{

public:

   voidcontent()

   {

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

   }

};

//C++页面

classCPP : publicBasePage

{

public:

   voidcontent()

   {

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

   }

};

voidtest01()

{

   //Java页面

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

   Javaja;

   ja.header();

   ja.footer();

   ja.left();

   ja.content();

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

   //Python页面

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

   Pythonpy;

   py.header();

   py.footer();

   py.left();

   py.content();

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

   //C++页面

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

   CPPcp;

   cp.header();

   cp.footer();

   cp.left();

   cp.content();

}

intmain() {

   test01();

   system("pause");

   return0;

}

总结:

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

class A : public B;

A 类称为子类 或 派生类

B 类称为父类 或 基类

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

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

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

继承方式

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

继承方式一共有三种:

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

网络异常,图片无法展示
|

示例:

classBase1

{

public:

   intm_A;

protected:

   intm_B;

private:

   intm_C;

};

//公共继承

classSon1 :publicBase1

{

public:

   voidfunc()

   {

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

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

       //m_C; //不可访问

   }

};

voidmyClass()

{

   Son1s1;

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

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

}

//保护继承

classBase2

{

public:

   intm_A;

protected:

   intm_B;

private:

   intm_C;

};

classSon2:protectedBase2

{

public:

   voidfunc()

   {

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

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

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

   }

};

voidmyClass2()

{

   Son2s;

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

}

//私有继承

classBase3

{

public:

   intm_A;

protected:

   intm_B;

private:

   intm_C;

};

classSon3:privateBase3

{

public:

   voidfunc()

   {

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

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

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

   }

};

classGrandSon3 :publicSon3

{

public:

   voidfunc()

   {

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

       //m_A;

       //m_B;

       //m_C;

   }

};


目录
相关文章
|
1月前
|
编译器 C++
【C++】详解C++的继承
【C++】详解C++的继承
|
12天前
|
编译器 C++ 容器
C++语言的基本语法
想掌握一门编程语言,第一步就是需要熟悉基本的环境,然后就是最重要的语法知识。 C++ 程序可以定义为对象的集合,这些对象通过调用彼此的方法进行交互。现在让我们简要地看一下什么是类、对象,方法、即时变量。 对象 - 对象具有状态和行为。例如:一只狗的状态 - 颜色、名称、品种,行为 - 摇动、叫唤、吃。对象是类的实例。 类 - 类可以定义为描述对象行为/状态的模板/蓝图。 方法 - 从基本上说,一个方法表示一种行为。一个类可以包含多个方法。可以在方法中写入逻辑、操作数据以及执行所有的动作。 即时变量 - 每个对象都有其独特的即时变量。对象的状态是由这些即时变量的值创建的。 完整关键字
29 2
|
7天前
|
安全 Java 编译器
|
1月前
|
Java 编译器 程序员
C++中的语法知识虚继承和虚基类
**C++中的多继承可能导致命名冲突和数据冗余,尤其在菱形继承中。为解决这一问题,C++引入了虚继承(virtual inheritance),确保派生类只保留虚基类的一份实例,消除二义性。虚继承通过`virtual`关键字指定,允许明确访问特定路径上的成员,如`B::m_a`或`C::m_a`。这样,即使基类在继承链中多次出现,也只有一份成员副本,简化了内存布局并避免冲突。虚继承应在需要时提前在继承声明中指定,影响到从虚基类派生的所有后代类。**
44 7
|
1月前
|
编译器 C++ 开发者
C++一分钟之-属性(attributes)与属性语法
【7月更文挑战第3天】C++的属性(attributes)自C++11起允许附加编译器指令,如`[[nodiscard]]`和`[[maybe_unused]]`,影响优化和警告。注意属性放置、兼容性和适度使用,以确保代码清晰和可移植。示例展示了如何使用属性来提示编译器处理返回值和未使用变量,以及利用编译器扩展进行自动清理。属性是提升代码质量的工具,但应谨慎使用。
49 13
|
1月前
|
存储 Java 程序员
【c++】继承深度解剖
【c++】继承深度解剖
23 1
|
2月前
|
编译器 程序员 C++
C++一分钟之-属性(attributed)与属性语法
【6月更文挑战第28天】C++的属性为代码添加元数据,帮助编译器理解意图。C++11引入属性语法`[[attribute]]`,但支持取决于编译器。常见属性如`nodiscard`提示检查返回值,`maybe_unused`防止未使用警告。问题包括兼容性、过度依赖和误用。使用属性时需谨慎,确保团队共识,适时更新以适应C++新特性。通过示例展示了`nodiscard`和`likely/unlikely`的用法,强调正确使用属性能提升代码质量和性能。
52 13
|
1月前
|
存储 编译器 数据安全/隐私保护
|
27天前
|
Java C++ 运维
开发与运维函数问题之C++中有哪些继承方式如何解决
开发与运维函数问题之C++中有哪些继承方式如何解决
17 0
|
2月前
|
C++
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)
28 0
C++职工管理系统(类继承、文件、指针操作、中文乱码解决)