C++中的继承性

server/2025/3/28 16:47:37/

定义:继承性是面向对象编程的重要特性,它允许一个类(子类或派生类)继承另一个类(父类或基类)的成员变量和成员函数,以实现代码复用和层次化设计,有公有、保护和私有继承三种方式。

如何实现继承:

    #include<iostream>#include<unordered_map>using namespace std;class A   //A父类、基类{public:int num;void fun(){cout << "A fun" << endl;}};//继承就是通过已经存在的类创建新的类class B :public A   //B子类、派生类{};int main(){B b;b.num = 2;b.fun();return 0;}

好处:

提高代码的复用性

注意事项:

1.会出现父、子类出现同名成员

继承同名成员处理方式

访问子类同名成员: 直接访问即可

访问父类同名成员 : 需要加作用域

当父类和子类中有同名函数时,子类中的函数会将父类中的同名函数隐藏(函数隐藏)

如果此时想通过子类对象访问父类对象,需要作用域

父类对象不可以访问子类对象中的成员变量,因为创建父类对象不会创建子类对象

#include<iostream>
#include<unordered_map>using namespace std;class A{public:int num;void fun(){cout << "A fun" << endl;}void fun(int a){cout << "A int fun" << endl;}};class B:public A{public:int num;void fun(){cout << "B fun" << endl;}};int main(){B b;b.num = 2; //访问的是子类的成员变量b.fun(); //访问的是子类的成员函数b.A::num = 3; //访问的是父类的成员变量b.A::fun();b.A::fun(2);cout << b.num << "  " << b.A::num << endl;return 0;}

2.会出现菱形继承现象

菱形继承:

两个派生类继承同一个基类,又有某一个类同时继承这两个派生类

#include<iostream>using namespace std;
class A{public:int a;A(){cout<<"A构造";}
};
class B:virtual public A//virtual为虚继承的关键字
{public:B(){cout<<"B构造";}
};
class C:virtual public A//virtual为虚继承的关键字
{public:C(){cout<<"C构造";}
};
class D:public A,public B//virtual为虚继承的关键字
{};
int main(){D d;d.a;d.B::a;return 0;
}

总结:

菱形继承会使子类继承两份相同的数据,导致资源浪费


http://www.ppmy.cn/server/149193.html

相关文章

不用下载,谷歌浏览器安装扩展程序axure

浏览器扩展里面搜插件直接下载使用就可以&#xff0c;但是有的浏览器搜不到&#xff0c;可以自己 下载一个axure-chrome-extension.crx插件&#xff0c;把axure-chrome-extension.crx后缀改为zip&#xff0c; 在谷歌浏览器扩展程序-管理程序-点击

R155 VTA 认证对汽车入侵检测系统(IDS)合规要求

续接上集“浅谈汽车网络安全车辆型式认证&#xff08;VTA&#xff09;的现状和未来发展”&#xff0c;有许多读者小伙伴有联系笔者来确认相关的R155 VTA网络安全审核要求&#xff0c;基于此&#xff0c;笔者将针对 R155 VTA 每一条网络安全审核细则来具体展开。 今天就先从汽车…

【深入探讨PostgreSQL:彻底删除数据并释放索引空间】——让数据库空间管理更高效!

全文目录&#xff1a; 开篇语前言 &#x1f31f;&#x1f4dc; 目录1. DELETE真的删除了吗&#xff1f; &#x1f914;2. 删除数据后如何释放索引空间&#xff1f; &#x1f4c9;2.1 VACUUM &#x1f9f9;2.2 VACUUM FULL &#x1f9f9;&#x1f4af;2.3 REINDEX 重新索引 &…

热更新xLua实践(xLua背包)

概述 学习完xLua后的实践小项目 准备工作 新建工程导入必要资源 VScode环境搭建 包括一些设置 开发工作 1.拼面板 主面板部分 背包面板部分 格子面板 2.Lua基本逻辑准备 InitClass.lua 脚本 --常用别名都在这里面定位 --准备我们之前导入的脚本 --面向对象相关 require(&q…

Sketch中文版下载安装:一站式设计平台指南

Sketch&#xff0c;这个以轻量和高效著称的矢量设计工具&#xff0c;已经在全球设计领域创造了许多令人惊叹的成果。它以其矢量编辑、控件和样式等功能而闻名。而其中文版本——一站式设计平台“在线设计工具”&#xff0c;在功能全面性、中文操作环境、简洁界面以及设备兼容性…

深度学习笔记25_LSTM实现糖尿病探索与预测

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 | 接辅导、项目定制 一、我的环境 1.语言环境&#xff1a;Python 3.9 2.编译器&#xff1a;Pycharm 3.深度学习环境&#xff1a;TensorFlow 2.10.0 二、GPU设置…

电脑运行时提示“0x80240037”错误,提示安装ie插件或其他微软程序时,报错提示“未指定的错误”是什么原因?以及要怎么解决和预防?

电脑运行时0x80240037错误解析&#xff1a;未指定的错误在安装IE插件或微软程序中的原因、解决与预防 作为一名经验丰富的软件开发从业者&#xff0c;我深知电脑在日常使用中可能遇到的各种问题&#xff0c;尤其是安装或更新软件时出现的错误。今天&#xff0c;我们将聚焦于一…

3D 生成重建029-Turbo3D一个让3D生成大模型更快的思路

3D 生成重建029-Turbo3D一个让3D生成大模型更快的思路 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 提出了Turbo3D&#xff0c;一个超快速文本到三维系统&#xff0c;能够在不到一秒钟内生成高质量的 Gaussian splatting 模型。Turbo3D 采用了一个快速的四步四视图扩…