C++基础5---继承和派生

学习网站:C语言网.
C语言基础:C语言基础.
笔记及源码gitee地址:C++基础笔记及源码.
编译器:Red Panda Dev-C++.



1.继承和派生

// 1.继承:有两个类,新类拥有原有类的全部属性叫做继承;
// 2.派生:原有类产生新类的过程叫做派生;
// 3.父类(基类):原有的类;派生类(子类):由基类派生出来的类;
#include <iostream>
using namespace std;

// Clock基类;
class Clock {
	private:
		int H;
		int M;
		int S;
	public:
		int SetTime(int h,int m,int s){
			this->H = h;
			this->M = m;
			this->S = s;
			
			return 0;
		}
		
		int ShowTime(){
			cout << "Now:" << H << ":" << M << ":" << S << endl;
			return 0;
		}
};

// AlarmClock派生类;
class AlarmClock:public Clock {		// 冒号:表示继承,public表示公有继承、私有继承、保护继承
	private:
		int AH;
		int AM;
	public:
		int SetAlarm(int AH,int AM){
			this->AH = AH;
			this->AM = AM;
			
			return 0;
		}
		int ShowAlarm(){
			cout << "AlarmTime:" << AH << ":" << AM << endl;
			return 0;
		}
};

int main(){
	AlarmClock A;
	A.SetTime(19,15,50);
	A.ShowTime();
	A.SetAlarm(5,30);
	A.ShowAlarm();
	
	return 0;
}

2.三种继承方式

// 公有继承、私有继承、保护继承;

// 1.公有继承
// 1.1 基类中的公有成员,在派生类中仍然为公有成员;无论派生类的成员函数还是派生类对象都可以访问;
// 1.2 基类中的私有成员,在派生类的成员还是派生类对象都不可以访问;
// 1.3 基类中的保护成员,在派生类中仍然是保护类型,可以通过派生类的成员函数访问,但派生类对象不可以访问;

// 2.私有继承
// 2.1 基类的公有和受保护类型,被派生类私有继承后,都变为派生类的私有类型,即在类的成员函数里可以访问,不能在类外访问;
// 2.2 基类的私有成员,在派生类型无论类内还是类外都不可以访问;

// 3.保护继承
// 3.1 基类的公有成员和保护类型成员在派生类中为保护成员;
// 3.2 基类的私有成员在派生类中不能被直接访问;

1

3.派生类的构造函数

// 1.派生类会吸纳基类的全部成员,但不包括构造函数及析构函数;
// 2.创建派生类在调用自己的构造函数前,会先调用基类的构造函数;
#include <iostream>
using namespace std;

class Clock {
	private:
		int H;
		int M;
		int S;
	public:
		Clock(){
			cout << "Clock's Constructor Called!" << endl;
		}
};

class AlarmClock:public Clock {
	private:
		int AH;
		int AM;
	public:
		AlarmClock(){
			cout << "AlarmClock's Constructor Called!" << endl;
		}
};

int main(){
	AlarmClock A;
	
	return 0;
}
// 调用带参数的基类构造函数;
// 格式:派生类构造函数名 (总形参表列) : 基类构造函数 (实参表列)
#include <iostream>
using namespace std;

class Clock {
	private:
		int H;
		int M;
		int S;
	public:
		Clock(){
			cout << "Clock's Constructor Called!" << endl;
		}
		Clock(int h,int m,int s){
			this->H = h;
			this->M = m;
			this->S = s;
			cout << "Clock's Constructor with parameter Called!" << endl;
		}
};

class AlarmClock:public Clock {
	private:
		int AH;
		int AM;
	public:
		AlarmClock(){
			cout << "AlarmClock's Constructor Called!" << endl;
		}
		AlarmClock(int h,int m,int s):Clock(h,m,s){
			cout << "AlarmClock's Constructor with parameter Called!" << endl;
		}
};

int main(){
	AlarmClock A(8,10,30);
	AlarmClock B;
	
	return 0;
}

4.派生类的析构函数

// 1.构造函数调用顺序:基类-->派生类;
// 2.析构函数调用顺序:派生类-->基类;
#include <iostream>
using namespace std;

class Clock {
	private:
		int H;
		int M;
		int S;
	public:
		Clock(){
			cout << "Clock's Constructor Called!" << endl;
		}
		~Clock(){
			cout << "Clock's Destructor Called!" << endl;
		}
};

class AlarmClock:public Clock {
	private:
		int AH;
		int AM;
	public:
		AlarmClock(){
			cout << "AlarmClock's Constructor Called!" << endl;
		}
		~AlarmClock(){
			cout << "AlarmClock's Destructor Called!" << endl;
		}
};

int main(){
	AlarmClock A;
	
	return 0;
}

5.虚基类及虚基类的定义使用

/*
背景叙述:
在多继承关系中,如果一个派生来的从两个父类继承,这两个父类是从一个基类继承,
即这个派生类可能继承了两份一样的成员;

虚基类:在继承的时候在继承类型public前用virtual修饰,这个时候,派生类和基类只维护一份一个基类对象,避免多次拷贝,出现歧义;
*/
#include <iostream>
using namespace std;

class Grandfather {
	public:
		int key;
	public:
};

// 虚基类定义:
// class Father1:virtual public Grandfather 
class Father1:public Grandfather {
};

// 虚基类定义:
// class Father2:virtual public Grandfather 
class Father2:public Grandfather {
};

// Grandson类继承了两个Father类,有两个key成员;
// 会造成二义性问题; 
class Grandson:public Father1,public Father2 {
};

int main(){
	Grandson A;
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

FUXI_Willard

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

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

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

打赏作者

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

抵扣说明:

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

余额充值