当前位置: 首页 > news >正文

C++继承实例讲解

C++类继承的基本概念

base class,基类、父类
derived class,派生类、子类

C++中的类可以扩展,创建保留基类特征的新类,这个过程称之为继承。类继承也可以描述为:派生类继承基类的成员,并在其上添加自己的成员。

定义C++类继承

两个类的继承关系在派生类中声明,派生类定义使用以下语法:
class derived_class_name: [ACCESS] base_class_name{
//
};
其中derived_ass_name是派生类的名称,base_class_name是它所基于的类的名称。
[ACCESS]是继承的最高权限级别符,可以是以下三个值(存取权限级别)的其中之一:
public,公共权限,三级(高)
protected,保护权限,二级
private,私有权限,一级(低)

//举例:
class DerivedClass: public BaseClass{};
派生类继承基类的所有可访问成员,并可自行扩展,举例来说,就是基类BaseClass包含一个成员x,派生类DerivedClass又定义了一个成员y,那么派生类DerivedClass则同时包含成员x和成员y
[ACCESS]最高权限级别符是public(公共权限继承),关于[ACCESS]有专文进行讲解,请查看我的博文:C++继承的三种方式。

类继承的基础实例

先创建一个多边形Polygon基类,以Polygon为基类,再创建两个派生类:长方形Rectangle和三角形Triangle。基类Polygon定义了基本属性宽width和高heigt,在派生类中分别定义各自的面积计算方法。
源代码,仔细看其中的注释。
D:\YcjWork\CppTour>vim c2003.cpp

#include <iostream>using namespace std;
/*** 类的继承
*/
class Polygon{ //定义一个基类Polygon//private,私有权限的成员是无法被派生类继承的protected: //定义保护权限的成员,以便派生类继承int width, height;public:void set_value(int w, int h){width = w;height = h;}
};class Rectangle: public Polygon{ //定义派生类Rectanglepublic:int area(){return width*height;}
};class Triangle: public Polygon{ //定义派生类Trianglepublic:int area(){return width*height/2;}
};int main(){Rectangle rect;Triangle trgl;rect.set_value(4,5); //调用基类的方法set_value()trgl.set_value(4,5); //调用基类的方法set_value()cout << rect.area() << endl; //调用派生类的方法area()cout << trgl.area() << endl; //调用派生类的方法area()return 0;
}

派生类Rectangle和Triangle的每个对象都包含从基类Polygon继承的成员,包括:width、height和set_values。派生类Rectangle和Triangle还拥有各自扩展的新成员:area。
用基类Polygon直接创建新对象时,保护权限protected与私有权限private修饰的成员没有差别。但使用派生类创建对象时,Polygon基类中protected修饰的成员才能被继承,而private修饰的成员则不能被继承。
本例中,通过将width和height声明为protected而不是private,这些成员才能在派生类Rectangle和Triangle中访问。而对于公共权限public的set_values ()函数,则从任何地方都可以访问。

编译运行

D:\YcjWork\CppTour>gpp c2003D:\YcjWork\CppTour>g++ c2003.cpp -o c2003.exeD:\YcjWork\CppTour>c2003
20
10D:\YcjWork\CppTour>

运行截屏

在这里插入图片描述

对本类成员的访问权限

不同的函数对本类成员存取权限(Access)的访问情况总结如下:

Accesspublicprotectedprivate
同一类的成员yesyesyes
派生类的成员yesyesno
非成员yesnono

其中“非成员”表示来自本类外的任何访问,如,从main()、另一个类或函数访问。

派生类从基类都继承了什么?

原则上,派生类对public修饰的公共基类的所有成员进行继承,但不会继承基类的以下成员:

  • 基类的构造器和解构器
  • 基类的赋值操作符
  • 基类的友元
  • 基类的私有成员

(全文完)


http://www.mrgr.cn/news/40660.html

相关文章:

  • 判断奇数id%2=1or id%2!=0
  • P3227 [HNOI2013] 切糕
  • 选择与运用合适工具提升编程效率的秘诀
  • 自闭症康复摘帽攻略:让孩子获得新生
  • 【css】如何设计出具有权威性的“机构”网页
  • Java面试——操作系统篇
  • MySQL基础篇 - 多表查询
  • 美本申请怎么填写课外活动?这些细节值得注意
  • 【AI知识点】点积相似性(dot-product similarity)
  • 数据库查询
  • 【Spine】引入PhotoshopToSpine脚本
  • Flowable之任务撤回(支持主流程、子流程相互撤回)
  • CMIS5.2_光模块切应用(Application Selection and Instantiation)
  • Elasticsearch:使用 LLM 实现传统搜索自动化
  • 位运算(5)_两数之和
  • 数据分析-30-电影死亡笔记中的数据分析思维
  • 【重学 MySQL】四十四、相关子查询
  • 【Java基础】Java面试基础知识QA(上)
  • 我的创作128天纪念日或者说自写博客以来的一些感悟
  • < IDE编程环境配置>