c++学习笔记3,继承

一个类可以继承一个或多个类,这个类叫派生类,被继承的叫基类

class A{
};
class B{
};
class C{
};
class myclass :private A,protect B,public C//继承方式 类,多继承时之间用逗号间隔
{
}

继承方式决定对基类成员的访问权限,基类的私有变量方法派生类不可访问,其他的按派生类与基类的访问范围取最小范围,比如基类protect方法,派生类继承方式为private,则在派生类内为private方法。

覆盖,派生类允许对同名成员进行覆盖,编译器会自动隐藏,但仍然存在,如果需要用到被覆盖的基类成员,需要使用作用域运算符区分,

class A {
public;
int i;
};
class B public A{int i;
B(){
i=9;
A::i=0;}
public:
void show (){
cout<< i<<" " << A::i<<endl; 
};

构造,派生类在构造时顺序是先基类后派生,析构相反,如果基类的方法缺省,派生类可以缺省。

继承时构造调用方法如下,格式 构造函数 (参数列表):基类构造(传参),...  。多继承时构造函数使用单逗号分隔。

class cbas
{
public:cbas(int i){}void func(){cout << "bas" << endl;}
};
class ctmp
{
public:ctmp(int i){}
};
class cdcv : public cbas, public ctmp
{public:cdcv(int i, int j) : cbas(i), ctmp(j){}void func(){cout << "cdcv" << endl;}void func(int i){cout << i << endl;}
};

指针和引用,允许基类指向或者引用派生类,派生类无法指向或引用基类,但是只能使用基类的方法和成员,因为在编译阶段就会按照指针或者引用的类型进行绑定,如果要实现指针指向的对象不同而使用不同方法,需要用到虚函数。

#include <iostream>
using namespace std;
class cbas
{
public:void func(){cout << "bas" << endl;}
};
class cdcv : public cbas
{
public:void func(){cout << "cdcv" << endl;}void func(int i){cout << i << endl;}
};
void func(int i = 0, int j = 9)
{cbas a;a.func();cdcv b;b.func();cbas *p = &a;//基类指针初始指向基类p->func();p = &b;//然后指向派生类p->func();cbas &r = b;//基类引用派生类r.func();cbas *v = &b;//派生类初始指向派生类v->func();cdcv &s = b;s.func();
}
int main()
{func(1);system("pause"); // 用于在Windows系统上暂停程序,防止控制台窗口关闭return 0;        // 返回0表示程序正常退出
}

虚函数用于解决上面的静态绑定问题,实现动态绑定。使用方法,在函数前加virtual,这样就可以使用基类指针调用派生类覆盖的方法。注意基类指针只能调用基类的方法,所以不能调用重载的方法。

#include <iostream>
using namespace std;
class cbas
{
public:cbas(int i){}virtual void func(){cout << "bas" << endl;}
};
class cdcv : public cbas
{public:cdcv(int i, int j) : cbas(i){}void func(){cout << "cdcv" << endl;}void func(int i){cout << i << endl;}
};
void func(int i = 0, int j = 9)
{cbas a(1);a.func();cdcv c(i, j);c.func();cbas *p = &a;p->func();p = &c;p->func();//  p->func(i);//不属于基类,不能调用重载的方法
}
int main()
{func(1);system("pause"); // 用于在Windows系统上暂停程序,防止控制台窗口关闭return 0;        // 返回0表示程序正常退出
}

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

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

相关文章

网工交换技术基础——VLAN原理

1、VLAN的概念&#xff1a; VLAN(Virtual LAN)&#xff0c;翻译成中文是“虚拟局域网”。LAN可以是由少数几台家用计算机构成的网络&#xff0c;也可以是数以百计的计算机构成的企业网络。VLAN所指的LAN特指使用路由器分割的网络——也就是广播域。 2、VLAN的主要作用&#xf…

假期必备!一款超级强大的视频终端下载工具,简洁又强大,24.5K star【文末送福利】

马上要五一了&#xff0c;假期想必少不了娱乐看电影电视剧&#xff0c;之前介绍了 Gopeed 这个支持全平台的下载神器。 今天再给大家介绍一个超级棒的命令行下载神器项目&#xff1a;Lux。 项目简介 Lux是一款用 Go 语言开发的视频下载库和 ClI 工具&#xff0c;拥有简洁的命…

c#使用OleDb库更改Access数据库的密码

技术要点 流程 使用OleDbConnection对象连接数据库。使用OleDbCommand对象执行修改数据库密码的操作。 技术要点 注意使用OleDbConnection对象时&#xff0c;需要使用独占方式打开&#xff0c;使用此种方式打开&#xff0c;才能够修改数据库的密码&#xff0c;方式为在连接…

【已解决】CondaError: Downloaded bytes did not match Content-Length

&#x1f60e; 作者介绍&#xff1a;我是程序员行者孙&#xff0c;一个热爱分享技术的制能工人。计算机本硕&#xff0c;人工制能研究生。公众号&#xff1a;AI Sun&#xff0c;视频号&#xff1a;AI-行者Sun &#x1f388; 本文专栏&#xff1a;本文收录于《AI实战中的各种bug…

SNMP-详解指南

目录 SNMP介绍 SNMP的工作机制轮询 SNMP的MIB&#xff08;管理信息库&#xff09; SNMP是基于UDP协议 SNMP介绍 SNMP&#xff08;Simple Network Management Protocol&#xff0c;简单网络管理协议&#xff09;是一种广泛应用于互联网上的网络管理协议。它提供了一种标准化…

springboot 人大金仓 kingbase-备份还原,命令中带密码,支持window和linux

命令带密码参考 Java代码实现国产人大金仓数据库备份还原需求-CSDN博客文章浏览阅读818次&#xff0c;点赞16次&#xff0c;收藏12次。本人在一次项目中&#xff0c;遇到了需要在系统管理中提供给用户备份还原系统数据的功能&#xff0c;由于项目特殊性&#xff0c;项目底层数…

vue实现文字转语音的组件,class类封装,实现项目介绍文字播放(2024-04-17)

1、项目界面截图 2、封装class类方法&#xff08;实例化调用&#xff09; // 语音播报的函数 export default class SpeakVoice {constructor(vm, config) {let that thisthat._vm vmthat.config {text: 春江潮水连海平&#xff0c;海上明月共潮生。滟滟随波千万里&#xf…

微信小程序前端获取OpenID和session_key

微信小程序前端获取OpenID和session_key code2Session: https://api.weixin.qq.com/sns/jscode2session?appidAPPID&secretSECRET&js_codeJSCODE&grant_typeauthorization_code wx.login({success: (res) > {console.log(res.code) //拿到codeuni.request({u…

docker搭建Medusa

Medusa 是一个为 Apache Cassandra 和 Scylla 数据库设计的数据备份工具&#xff0c;它支持多种存储后端&#xff0c;包括本地存储和云存储服务&#xff0c;如 Google Cloud Storage 和 Amazon S3。Medusa 使得数据库备份和恢复过程更加灵活和可靠。 功能介绍 高性能备份&…

开展在即!中银富登邀您共赴雄安2024数字城市展览会(雄安建博会)

中银富登村镇银行&#xff1a;雄安新区金融创新的领航者 在即将举办的2024雄安数字城市建设展览会上&#xff0c;中银富登村镇银行将以其在金融创新和普惠金融服务领域的卓越表现&#xff0c;成为展会的一大亮点。作为雄安新区首家全国性银行业金融机构总部&#xff0c;中银富…

DolphinScheduler 调度工作流报错 Host key verification failed.

文章目录 出现问题错误原因及解决方法1.SSH 免密登录配置失败、失效2.不存在该租户 建议 出现问题 在执行调度任务时&#xff0c;失败了&#xff0c;查看日志发现错误 —— Host key verification failed. 错误原因及解决方法 1.SSH 免密登录配置失败、失效 这种情况就检查…

请求的数据类型{ }{[ ]} 解析

一、案例区别 1.1源码 var saveInBrowserDeviceInfoStr localStorage.getItem(SaveInBrowserDeviceInfo); var saveInBrowserDeviceInfo;if (saveInBrowserDeviceInfoStr) {console.log(存放在浏览器的设备信息&#xff08;字符串&#xff09;&#xff1a; saveInBrowserDe…

黄仁勋最新访谈:GPU性能的革命性提升与AI未来

近期&#xff0c;英伟达CEO黄仁勋与美国CNBC知名主持人、股评人吉姆克莱默&#xff08;Jim Cramer&#xff09;在《Mad Money》节目中展开了一场关于技术未来和人工智能的对话。访谈里&#xff0c;黄仁勋不仅提到了英伟达在过去八年中将AI算力性能提高1000倍&#xff0c;还预言…

程序中调用DB存储过程记得异常处理时尝试回滚可能存在的事务

程序中调用DB过程要注意这种情况&#xff1a; 有些存储过程需要执行比较久&#xff0c;在数据库中直接跑本身没有出错&#xff0c;但从程序中调用该存储过程会由于超时进入程序异常处理&#xff0c;这时数据库后台依然在跑着该存储过程&#xff0c;如果该存储过程中有启用事务…

Linux:如何删除指定时间之前修改的文件

1、与文件有关的时间 在说明如何删除符合这种要求的文件之前&#xff0c;先来看看与文件有关的有哪些时间 简名全名中文名含义atimeaccess time访问时间文件中的数据最后被访问的时间mtimemodify time修改时间文件中的数据最后被修改的时间ctime change time变化时间文件的元…

对装饰器模式的理解

目录 一、场景二、面对场景中的新需求&#xff0c;我们怎么办&#xff1f;1、暴力法&#xff1a;直接修改原有的代码。2、子类继承法&#xff1a;既然要增强行为&#xff0c;那我搞一个子类&#xff0c;覆写不就完事了&#xff1f;3、装饰器模式 三、对装饰器模式的思考1、从代…

Rust---泛型(Generics)

目录 泛型和多态泛型参数泛型的使用结构体中使用枚举中使用方法中使用函数中使用为特定的类型参数提供特定的方法实现泛型和多态 泛型允许在编写代码时使用抽象类型来代替具体类型,可以在不同的数据类型上工作,同时避免代码重复。通过泛型,我们可以编写一次代码,然后在需要…

AI编程工具助手

随着人工智能技术的发展&#xff0c;AI编程工具助手应运而生。 AI编程工具助手通过利用人工智能技术&#xff0c;尤其是机器学习和自然语言处理&#xff0c;来辅助软件开发过程中的代码编写、调试、优化等工作。这些工具通过提供代码补全、代码生成、代码审查、性能优化等功能…

Linux中进程和计划任务

一.程序 1.什么是程序 &#xff08;1&#xff09;是一组计算机能识别和执行的指令&#xff0c;运行于电子计算机上&#xff0c;满足人们某种需求的信息化工具 &#xff08;2&#xff09;用于描述进程要完成的功能&#xff0c;是控制进程执行的指令集 二.进程 1.什么是进程…