详解C++之子类型

最近这些模块都是用来复习的,因为学着学着前面对于C++的基础知识就会有些遗忘,所以借着这段时间来好好复习一下以前的知识,总结一下,也是希望这些总结能够帮助到大家。

什么是子类型

公有继承时,派生类的对象可以作为父类的对象处理,派生类是父类的子类型。

注意是共有继承!!!
在这里插入图片描述

可以把A类的子类型作为A类来使用,看代码

#include<iostream>
using namespace std;
class A {
public:
	A() {}
	~A() {}
	void kill() {
		cout << "A kill" << endl;
	}

};

class B :public A {
public:
	B() {}
	~B() {}
	void kill() {
		cout << "B kill" << endl;
	}
};

void test(A a) {
	a.kill();  //调用的是A类对象的方法
}
int main() {
	B b;
	test(b);  //等于是test(A的对象)
	return 0;
}

运行结果:
在这里插入图片描述

子类型关系具有单向传递性。

C类是B类的子类型 , B类是A类的子类型, 那么C类也是A类的子类型,在调用函数的时候也可以用C的对象来作为A类来使用(不信你可以自己试试😂)

子类型的作用

在需要父类对象的任何地方, 可以使用”公有派生”的子类的对象来替代, 从而可以使用相同的函数统一处理基类对象和公有派生类对象 即:形参为基类对象时,实参可以是派生类对象
#include<iostream>
#include<string>
using namespace std;
class Father {
public:
	Father() {}
	~Father() {}
	void play() { cout << "打麻将去!!!" << endl; };
};

class Son :public Father {
public:
	Son() {};
	~Son() {};
	void play() { cout << "看剧去!!!" << endl; }

};
void game1(Father* f1, Father* f2) {
	f1->play();
	f2->play();
}

int main() {
	Father f1;
	Son s1;
	cout << "两个参数都是Father类对象的指针" << endl;
	game1(&f1, &f1);
	cout << "------------------------------" << endl;
	cout << "两个参数都是Son类对象的指针" << endl;
	game1(&s1, &s1);
	return 0;
}

运行结果:
在这里插入图片描述

重要的东西要多说几遍:要共有继承,共有继承,如果是protected和private继承则会报错


子类型的应用

1.基类(父类)的指针,可以指向这个类的公有派生类(子类型)对象。 Son yangGuo; Father * f = &yangGuo; 2.公有派生类(子类型)的对象可以初始化基类的引用 Son yangGuo; Father &f2 = yangGuo; 3.公有派生类的对象可以赋值给基类的对象 Son yangGuo; Father f1 = yangGuo; 注意:以上的应用,反过来就会编译失败,可以把子类当作基类来使用!

把子类当作父类来使用在开发中这种性质我们会需要,但是大家是不是觉得这样特别怪,凭什么我明明是子类一定要调用父类的方法呢?那么怎么让子类调用自己的方法呢,这就要涉及到我们C++的另一个特性:”多态“这个我们就后面来说吧。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值