C++语法—类的继承

news/2025/11/2 11:23:51/文章来源:https://www.cnblogs.com/yu99999come/p/19184590

一、继承

继承方式有三种,public、private、protected

不管是什么继承方式,父类中的私有属性都无法直接访问,只能通过get、set访问

使用public继承,那么父类中的public、private、protected在子类中维持原来的修饰符;

使用protected继承,那么父类中的public、protected在子类中变为protected修饰,让子类的子类可以继续访问,无限向下传播;

使用private继承,那么父类中的public和protected在派生类中可以访问,父类中private数据成员不能访问。

1.1 子类显示调用父类构造函数

当父类只有带参数的构造函数时,子类才能以显示方法调用父类带参数的构造函数,否则编译将出现错误。

#include <iostream>
using namespace std;
class CEmployee                                        //定义CEmployee类
{public:int m_ID;                                            //定义数据成员char m_Name[128];                                    //定义数据成员char m_Depart[128];                                    //定义数据成员CEmployee(char name[])                                //带参数的构造函数{strcpy(m_Name,name);cout << m_Name<<"调用了CEmployee类带参数的构造函数"<< endl;    }CEmployee()                                        //无参构造函数{strcpy(m_Name,"MR");cout << m_Name<<"CEmployee类无参构造函数被调用"<< endl;        }~CEmployee()                                        //析构函数{cout << "CEmployee类析构函数被调用"<< endl;        //输出信息}
};
class COperator :public CEmployee                            //从CEmployee类派生一个子类
{public:char m_Password[128];                                //定义数据成员COperator(char name[ ]):CEmployee(name)                //显示调用父类带参数的构造函数{//设置数据成员cout << "COperator类构造函数被调用"<< endl;            //输出信息}COperator():CEmployee("JACK")                        //显示调用父类带参数的构造函数{//设置数据成员cout << "COperator类构造函数被调用"<< endl;            //输出信息}~COperator()                                        //析构函数{cout << "COperator类析构函数被调用"<< endl;            //输出信息}
};
int main(int argc, char* argv[])                                //主函数
{COperator optr1;                        //定义一个COperator对象,调用自身无参构造函数COperator optr2("LaoZhang");           //定义一个COperator对象,调用自身带参数构造函数return 0;
}
 
 

1.2 子类显示调用父类成员函数

如果子类中的成员函数与父类的名字一样,子类调用时会默认调用子类自己的成员函数,要想调用父类的该同名函数,则需要在调用时,方法前面添加父类作用域。

如果子类重载父类函数,既子类中有父类的同名函数,子类将屏蔽所有的父类同名函数不管父类重载了几次,父类中所有重名函数都被屏蔽,无法通过子类显示调用。

class Fu
{public:void test();
};
class Zi :public Fu
{public:void test();
};void main()
{Zi z1;z1.test();        //默认调用子类的成员函数z1.Fu::test();    //显示调用父类的成员函数
}
 
 

1.3 重载运算符

运算符实际上是一个函数,运算符的重载是函数的重载。

operator 类型名();
 
 

重载 + 号运算符

#include <iostream>
using namespace std;
class CBook
{public:CBook (int iPage){m_iPage=iPage;}CBook operator+( CBook b){return CBook (m_iPage+b.m_iPage);}void display(){cout << m_iPage << endl;}
protected:int m_iPage;
};void main()
{CBook bk1(10);CBook bk2(20);CBook tmp(0);tmp= bk1+bk2;tmp.display();
}
 
 

上面案例中的 + 号左右两边因为是相同的类型,所以可以交换左右的顺序。

operator + () 没有参数代表前置运算,要求前面的值,

operator + (int) 有参数代表后置运算,要求后面的值。

operator ++ () 没有参数代表前置运算,要求前面的值,

operator ++ (int) 有参数代表后置运算,要求后面的值。

下方的案例交换左右顺序是错误的:

#include <iostream>
using namespace std;
class CBook
{public:int m_Pages;void OutputPages(){cout<<m_Pages<<endl;}CBook(){m_Pages = 0;}CBook operator + (const int page){CBook bk;bk.m_Pages = m_Pages + page;return bk;}
};void main()
{CBook vbBook,vfBook;vfBook =  vbBook + 10;        //这里交换为 10 + vbBook 是错误的vfBook.OutputPages();
}
 
 

1.4 转换运算符

c++语言中普通的数据类型可以进行强制类型转换。

int i= 10;
double d;
d =(double) i;
//等同于下面的
d = double(i);
 
 

1.4.1 自定义类的强制转换重载

#include "stdafx.h"
#include <iostream>/*设计鸟类和动物类,创建一个鸟对象,将鸟对象强制转换为动物对象。
*/using namespace std;class CAnimal
{public:CAnimal(const char * name) {strcpy(this->name, name);}CAnimal(const CAnimal& other) {if(this != &other) {strcpy(this->name, other.name);}}char name[64];
};class CBird{public:CBird(const char * name){strcpy(this->name, name);}operator CAnimal() const{cout << this->name << "张张!" << endl;return CAnimal(this->name);}char name[64];
};int main(int argc, char* argv[])
{CBird bid("张伟");CAnimal ani = (CAnimal)bid;return 0;
}
 
 

1.5 多继承

#include <iostream>
using namespace std;
class CBicycle
{public:CBicycle(){cout << "Bicycle Construct" << endl;}CBicycle(int iWeight){m_iWeight=iWeight;}void Run(){cout << "Bicycle Run" << endl;}protected:int m_iWeight;
};class CAirplane
{public:CAirplane(){cout << "Airplane Construct " << endl;};CAirplane(int iWeight){m_iWeight=iWeight;}void Fly(){cout << "Airplane Fly " << endl;}protected:int m_iWeight;
};class CAirBicycle : public CBicycle, public CAirplane
{public:CAirBicycle(){cout << "CAirBicycle Construct" << endl;}void RunFly(){cout << "Run and Fly" << endl;}
};
void main()
{CAirBicycle ab;ab.RunFly();
}
 
 

1.6 多态

多态性是指具有不同功能的函数可以用同一个函数名。

多态性通过联编实现。

联编是指一个计算机程序自身彼此关联的过程。

按照进行的阶段不同,联编可以分为静态联编和动态联编。

在c++中,根据联编的时刻不同,存在两种类型的多态性,即函数重载和虚函数。

1.6.1 虚函数

重写虚函数时,函数原型必须保持一致。例如,基类为int类型,子类重写时也必须为int类型

虚函数有以下几方面的限制:

1.只有类的成员函数才能成为虚函数

2.静态成员函数不能是虚函数,因为静态成员函数不受限与某个对象

3.内联函数不能是虚函数,因为内联函数不能在运行中动态确定其位置

4.构造函数不能是虚函数,析构函数通常是虚函数

1.6.2 虚继承

虚继承解决菱形继承问题

1.7 抽象类

包含有纯虚函数的类称为抽象类,一个抽象类至少具有一个纯虚函数。

抽象类只能作为基类派生出新的子类,而不能在程序中被实例化,但是可以使用指向抽象类的指针。

一名软件构造师可以通过纯虚函数建立接口,让程序员填写代码实现接口,而自己主要负责建立抽象类。

1.7.1 纯虚函数

pure virtual function 纯虚函数是被标明为不具体实现的虚成员函数,它不具备函数的功能。

纯虚函数声明

virtual 类型 函数名(参数表列) = 0;
 
 

纯虚函数不能被继承,当基类是抽象类时,在派生类中必须给出基类中纯虚函数的定义,或在该类中再声明其为纯虚函数。只有在派生类中给出基类所有纯虚函数的实现时,该派生类才不再为抽象类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/953445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025 年 11 月印染厂污水生物除臭设备,污水站生物除臭设备,屠宰场生物除臭设备厂家最新推荐,聚焦高端定制需求与全案交付能力

印染厂污水、污水站、屠宰场的臭气成分复杂且工况差异大,对生物除臭设备的高端定制与全案交付能力要求极高。但部分厂家仅提供标准化设备,无法满足个性化需求,且交付环节缺乏统筹,影响项目落地效率。本次推荐基于行…

2025 年 11 月污水处理厂生物除臭设备,污水泵站生物除臭设备,厨余垃圾生物除臭设备厂家最新推荐,高性能与可靠性兼具的优质品牌

污水处理厂、污水泵站、厨余垃圾处理场景的臭气治理,对生物除臭设备的性能与可靠性要求极高。但当前市场部分设备存在除臭效率低、故障频发等问题,影响企业治理效果。本次推荐基于行业协会专项测评,测评以 “高性能…

2025年11月超声波清洗机厂家榜单:性能与口碑双轨对比

年底临近,生产线集中检修、实验室设备升级、精密加工订单加急,超声波清洗机成为众多工厂、医院、高校实验室的“刚需”。用户普遍面临三大痛点:一是清洗效果能否通过客户或监管方的颗粒度检测;二是设备寿命与售后响…

2025 年 11 月印染厂污水生物除臭设备,食品厂污水生物除臭设备,屠宰场生物除臭设备厂家最新推荐,实力品牌深度解析采购无忧之选!

印染厂污水、食品厂污水、屠宰场等场景因污染物成分复杂,臭气治理难度大,对应的生物除臭设备选择尤为关键。但当前市场品牌良莠不齐,企业常面临设备适配性差、售后无保障等问题。本次推荐基于行业协会最新测评数据,…

2025年11月超声波清洗机厂家排行:五家主流品牌深度评测

把设备交给产线之前,采购经理最常问的三句话是:能不能洗得干净、会不会洗坏零件、后续维护麻不麻烦。这三句背后,其实是同一件事——如何在预算、产能、工艺标准之间找到那条“刚好”的线。2025年,超声波清洗行业继…

2257. 统计网格图中没有被保卫的格子数

给你两个整数 m 和 n 表示一个下标从 0 开始的 m x n 网格图。同时给你两个二维整数数组 guards 和 walls ,其中 guards[i] = [rowi, coli] 且 walls[j] = [rowj, colj] ,分别表示第 i 个警卫和第 j 座墙所在的位置。…

2025年11月白茶品牌榜单:北路领衔五强横向评测

立冬将至,不少茶友开始为一年一度“封箱藏茶”做准备:有人想囤点甘甜的老寿眉,煮着喝更暖胃;有人计划挑几饼年份银针,送礼体面又保值;也有人刚入坑,只想先买几泡试饮装,把白茶的毫香、枣香、药香一次性体验清楚…

在UOS中浏览NAS图片

一、启用远程环境的预览图功能 UOS的文件管理器对本地文件默认开启预览图功能,但对NAS等远程目录,考虑加载速度和操作流畅性,默认关闭该功能,需要手动开启,步骤如下:打开文件管理器的设置选项在左侧边栏找到“工…

未来编程

接上篇【AI时代下普通小程序员的想法】。人类编程的发展呈现出几个明显趋势: 一、编程更易学易用 例如:C → Java → AI,语言和工具不断朝着降低学习与使用门槛的方向演进。 二、代码耦合度不断降低(decouple) 目…

基于MATLAB与Zemax动态数据交换(DDE)工具箱

一、DDE通信原理架构二、核心工具箱功能 Zemax DDE Toolbox 提供以下关键功能模块:连接管理 zDDEInit:初始化DDE会话 zDDEClose:终止通信连接 zSetTimeout:设置超时阈值(默认3秒) 数据交互 zLoadFile:加载ZMX文…

2025年11月婴幼儿润肤乳产品推荐榜:五款人气单品横向对比

秋冬交替,室内外温差大,宝宝皮脂膜尚未健全,稍不留神就出现干、红、痒、脱屑。新手爸妈在社群、电商页面来回切换,常被“天然”“无添加”等字样包围,却难判断哪一瓶真正安全又保湿。2024年母婴研究院调研显示,超…

2025年11月婴幼儿润肤乳产品推荐榜:五款安心型号客观评价

入秋以后,门诊里因为“苹果脸”“干痒抓痕”来咨询的家长明显增多。对新手父母而言,宝宝皮肤厚度仅为成人二分之一,屏障脂质少,水分流失快,一旦遇到降温、空调、口水或衣物摩擦,极易出现泛红、脱屑甚至湿疹。润肤…

2025年11月婴幼儿润肤乳产品推荐排行:从天然成分到锁水力全面评价

入秋以后,门诊里因干燥泛红就诊的婴幼儿明显增多,家长最常问的一句话是:“到底该选哪款润肤乳?”新生角质层厚度仅为成人三分之一,屏障未完善,秋风一起,水分流失速度是成人的两倍,稍不留神就出现脱屑、干痒、小…

2025年11月珠海酒店排行:日月贝旁丽怡酒店与九家高分店对比榜

计划到珠海看日月贝、逛情侣路,却担心旺季房价跳涨、停车难、亲子设施不足?2025年秋冬交界,珠海进入会展与海岛游叠加的“小高峰”,市文化广电旅游体育局数据显示,10月重点酒店平均入住率已升至78.4%,情侣路沿线…

2025年11月成都律师事务所排行榜:十家机构权威对比与实用指南

在成都这座西部法律需求高地,企业主、创业者、普通市民遇到股权纠纷、婚姻财产、劳动仲裁、刑事风险时,往往陷入“选所难”:大型所收费是否一定高?小型所经验是否足够?2025年第三季度四川省司法厅数据显示,成都执…

2025年11月珠海酒店评价榜:丽怡情侣路店对比九家真实口碑全记录

计划来珠海看航展、逛长隆、拍日月贝夜景,却担心旺季房价跳涨、位置不熟、亲子设施不足?十一二月正值会展与候鸟游客叠加,珠海酒店平均入住率连续五年同期保持在82%以上,情侣路、横琴、南湾三大板块房源提前两周即…

2025年11月合肥建筑律师评测榜:十强律所服务与胜诉率排名

正在准备招投标的合肥某市政项目负责人,常把“建筑律师”四个字敲进搜索框:合同条款怎么防风险?工程款被拖欠如何快速保全?分包纠纷走到诉讼,本地律师有没有打过大标的?这些疑问背后,是建筑行业资金体量大、履约…

2025年11月合肥建筑律师推荐榜:建设工程案件代理对比

在合肥,建设工程项目从立项到竣工往往涉及招投标、总包分包、签证索赔、结算审计等多个环节,任何一环出现争议都可能引发高额损失。用户搜索“合肥建筑律师”时,通常处于三种场景:一是项目已出现结算纠纷,需快速锁…

大模型基础补全计划(六)---带注意力机制的seq2seq实例与测试(Bahdanau Attention)

大模型基础补全计划(六)---带注意力机制的seq2seq实例与测试(Bahdanau Attention)PS:要转载请注明出处,本人版权所有。 PS: 这个只是基于《我自己》的理解, 如果和你的原则及想法相冲突,请谅解,勿喷。环境说明无 …

25岁的一天与M2002RTC

25岁的一天与M2002RTC暑假的时候,我在五环outlets高新工厂店的New Balance 看上一双M2002RTC。穿着短裤试穿也很好看。549元。当时感到并不是那么刚需,没有买,但心里一直浅浅的惦记。 秋色渐深,雨总是下个没完,天…