详解C++之子类型

详解C++之子类型本篇博客详细讲解了 C 的子类型 看完这篇文章您一定会对子类型有更清晰的认识 c 子类

大家好,欢迎来到IT知识分享网。

最近这些模块都是用来复习的,因为学着学着前面对于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++的另一个特性:”多态“这个我们就后面来说吧。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129003.html

(0)
上一篇 2025-08-27 16:33
下一篇 2025-08-27 16:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信