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{ //定义派生类Rectangle
	public:
		int area(){
			return width*height;
		}
};

class Triangle: public Polygon{ //定义派生类Triangle
	public:
		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 c2003

D:\YcjWork\CppTour>g++ c2003.cpp -o c2003.exe

D:\YcjWork\CppTour>c2003
20
10

D:\YcjWork\CppTour>

运行截屏

在这里插入图片描述

对本类成员的访问权限

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

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

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

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

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

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

(全文完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ycjnx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值