上机实验5派生类与继承

实验目的

●掌握派生类的声明方法和派生类构造函数的定义方法
●掌握不同方式下,基类成员在派生类中的访问属性和访问规则
 

派生类声明方法与构造函数定义:

(1)派生类声明的一般格式:

Class 派生类名:[继承方式] 基类名{

        派生类新增的数据成员和成员函数

};

如果不显式地给出继承方式关键字,系统默认为私有继承(private)。

(2)派生类构造函数定义的一般格式:

派生类名(参数总表):积累名(参数表)

{

        派生类新增数据成员的初始化语句

}

而在创建派生类对象时,首先执行基类的构造函数,随后再执行派生类的构造函数:当撤销派生类对象时,则先执行派生类的析构函数,随后再执行基类的析构函数。

给定下列程序:

#include<iostream>

using namespace std;

class Base {
public:
	void setx(int i) {
		x = i;
	}
	int getx() {
		return x;
	}
public:
	int x;
};

class Derived :public Base {
public:
	void sety(int i) {
		y = i;
	}
	int gety() {
		return y;
	}
	void show() {
		cout << "Base::x=" << x << endl;
	}
public:
	int y;
};

int main() {
	Derived bb;
	bb.setx(16);
	bb.sety(25);
	bb.show();
	cout << "Base::x=" << bb.x << endl;
	cout << "Derived::y=" << bb.y << endl;
	cout << "Base::x=" << bb.getx() << endl;
	cout << "Derived::y=" << bb.gety() << endl;
	return 0;
}

这时输出结果为:

 此时基类中所有成员都为公有成员,且派生类为公有继承。由下表可知:

即在公有继承中,基类中的公有成员,能够被派生类内部访问,也能被派生类对象访问,就导致了输出以上结果。

派生类中的访问属性和访问规则

而在私有继承和保护继承中,其访问规则如下:

这里的内部访问指的是:由派生类中新增的成员函数对基类继承来的成员的访问

对象访问指的是:在派生类外部,通过派生类的对象对从基类继承来的成员的访问

 

总的来说,在基类中的属性,继承到派生类了之后,其的属性是从严的。

可以归纳出一下几点:

(1)基类中的私有成员。

无论哪种继承方式,基类中的私有成员不允许派生类继承,即在派生类中不可直接访问。

(2)基类中的公有成员。

当类的继承方式为公有继承时,基类中所有公有成员在派生类中仍以公有成员的身份出现。

当类的继承方式为私有继承时,基类中所有公有成员在派生类中都以私有成员的身份出现。

当类的继承方式为保护继承时,基类中所有公有成员在派生类中都以保护成员的身份出现。

(3)基类中的保护成员。

当类的继承方式为公有继承时,基类中所有保护成员在派生类中仍以保护成员的身份出现。

当类的继承方式为私有继承时,基类中所有保护成员在派生类中都以私有成员的身份出现。

当类的继承方式为保护继承时,基类中所有保护成员在派生类中仍以保护成员的身份出现。

实验总结:

(1)继承是新的类从已有类那里得到的已有的特性,其包含了已有类的特征,同时也可以加入自己的新特性。

(2)派生类对基类成员访问规则会受到继承方式影响,需要牢记的是派生的属性是从严(派生方式,基类属性)。且不管是哪种继承方式,基类中的私有成员在派生类中是不可以直接访问的。这样也很符合C++的语言特性,对数据的保护性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值