【C++】4.1 派生类与继承 - 派生类的概念

4.1 派生类的概念

4.1.1 继承的使用

(1)已有类称为基类或是父类,产生的新类成为派生类或是子类。

(2)继承可以形成类的结构

(3)目的:提高代码可重用性

4.1.2 派生类的声明

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

class 派生类名:[继承方式]基类名{
    //派生类新增的数据成员和成员函数
};

其中,继承方式有public、private(系统默认)、protected

4.1.3 派生类的构成

(1)从基类继承成员

(2)增加数据成员和成员函数

(3)构造派生类3个工作步骤:

        1)派生类从基类接收成员(除构造函数和析构函数之外)

        2)调整从基类接收的成员

              > 通过继承方式改变基类成员在派生类中的访问属性

              > 覆盖基类的同名函数(函数名相同,参数相同)

4.1.4 基类成员在派生类中的访问属性

基类成员在派生类中的访问属性

基类中的成员 在公有派生类中的访问属性 在私有派生类中的访问属性 在保护派生类中的访问属性 私有成员 不可直接访问 不可直接访问 不可直接访问 公有成员 公有 私有 保护 保护成员 保护 私有 保护

4.1.5 派生类对基类成员的访问

(1)派生类对基类成员的访问形式有

          1)内部访问:由派生类中新增的成员函数对基类继承的成员访问

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

                               私有继承的访问规则

基类中的成员                  私有成员         公有成员            保护成员

访问方式:内部访问        不可访问           可访问                可访问

访问方式:对象访问        不可访问         不可访问            不可访问

                                公有继承的访问规则

基类中的成员                   私有成员       公有成员             保护成员

访问方式:内部访问          不可访问        可访问                 可访问

访问方式:对象访问          不可访问        可访问               不可访问

                                保护继承的访问规则

基类中的成员                   私有成员       公有成员             保护成员

访问方式:内部访问         不可访问         可访问                 可访问

访问方式:对象访问         不可访问      不可访问             不可访问

 

示例:以公有继承的访问规则为例

#include<iostream>
using namespace std;

class Base{
	
	public:
		int pub_data;		//基类公有数据成员 
		Base(int pub=0,int pri=0,int pro=0);		//基类带默认参数的构造函数 
		~Base();			//基类构造函数 
	private:
		int pri_data;		//基类私有数据成员 
	protected:
		int pro_data;		//基类保护数据成员 
}; 

Base::Base(int pub,int pri,int pro){
	
	pub_data=pub;
	pri_data=pri;
	pro_data=pro;
	cout<<"Constructor Base called"<<endl;
}

Base::~Base(){
	
	cout<<"Destructor Base called"<<endl;
}

class Derive:private Base{
	public:
		Derive(int pub,int pri,int pro):Base(pub,pri,pro){
			cout<<"Constructor Derive called"<<endl;
		}
		~Derive(){
			cout<<"Destructor Derive called"<<endl;
		}
			
		void set(int pub,int pro){
			pub_data=pub;
			pro_data=pro;
		}
		
		void displaydata(){
			cout<<"pub_data = "<<pub_data<<endl;
			cout<<"pro_data = "<<pro_data<<endl;
		}
		
/********************* 错误 *********************/
/*** 派生类通过内部访问的方式访问基类中的私有成员***/

//		void show_pri_data(){
//			cout<<"pri_data = "<<pri_data<<endl;	
//		}

/********************* 错误 *********************/

};

int main()
{
	Derive de(1,2,3);
	de.displaydata();
	return 0;
	
}

运行结果:

错误:编译器报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值