当前位置: 首页 > news >正文

C++ (初始面向对象之继承,实现继承,组合,修饰权限)

初始面向对象之继承

根据面向对象的编程思路,我们可以把共性抽象出来封装成类,然后让不同的角色去继承这些类,从而避免大量重复代码的编写

实现继承

继承机制是面向对象程序设计中使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,添加功能,这样产生的新类叫做子类(派生类),被继承的类型称为父类(基类)

格式

class 派生类名:继承方式  基类名1,继承方式 基类名2,....

{

        派生类成员;

};

继承方式有: public,protrcted,private

 class Houyi:public Hero,pulbic Ranger{public:Houyi(const string &name,int distance,int looks);~Houyi();void show() const;private:int looks; // 颜值
}

此时的Houyi这个类继承了Hero和Ranger两个类,拥有了Hero和Ranger的所有成员

构造函数的调用顺序:先按照继承时的顺序挨个调用基类的构造函数,然后调用派生类的构造函数

析构函数调用顺序和构造函数调用顺序相反

某个类的私有成员属性只能在该类中使用, 如果想在派生类中使用,就必须对外提供一个公共的方法。

组合

组合是对现有对象进行拼装即组合产生新的具有更复杂功能的类,组合强调的是整体与部分的关系,它们之间有明显的“has a”关系

class 类名{public :成员函数;private :类1 对象1;类2 对象2;};

构造函数的调用顺序:

1.按照继承时的顺序挨个调用基类的构造函数

2.调用对象成员的构造函数

3.调用派生类的构造函数

继承的优缺点

继承是一种 “is-a” 的关系,例如 Student 继承 Person,说明 Student 是 Person。

优点: 方法复用: 子类可以复用父类的方法,并在需要时重写(override)父类的方法,方便地实现对父类的扩展。

缺点: 细节可见性: 父类的内部细节对子类是可见的,违反了信息隐藏原则。

编译时绑定: 子类继承的父类方法在编译时确定,无法在运行时改变父类方法的行为。

高耦合: 如果父类的方法更改(例如增加参数),子类必须进行相应的修改,导致子类与父类高度耦合,违反了低耦合原则。

组合的优缺点

组合是一种 “has-a” 或 “contains-a” 的关系,例如一个 Car 包含一个 Engine 对象。

在类设计时,通过将一 个类的对象作为另一个类的成员变量来实现组合。

优点:

低耦合: 当前对象与包含对象的内部细节分离,只通过其公开接口进行交互,降低耦合度。

运行时动态绑定: 当前对象可以在运行时动态绑定所包含的对象,可通过 set 方法进行对象赋值。

灵活性高: 可以将不同的对象组合在一起,从而灵活地设计系统。

缺点:

对象数量增多: 组合可能会产生大量对象,增加内存使用和管理复杂性。

接口设计复杂: 为了组合多个对象,需要仔细设计和定义接口,以确保类之间的协同工作。

修饰权限

类成员的修饰权限

继承方式


文章转载自:

http://JnqeulH3.txwnt.cn
http://6J4vvixe.txwnt.cn
http://GTL6d9yn.txwnt.cn
http://WfGGVfSk.txwnt.cn
http://yLpInFf6.txwnt.cn
http://kShZuT2k.txwnt.cn
http://ShPMDXCQ.txwnt.cn
http://GgDVojae.txwnt.cn
http://SFLTe3jM.txwnt.cn
http://0BLTHnjs.txwnt.cn
http://DkvFnakM.txwnt.cn
http://p6L7CwCo.txwnt.cn
http://9ng7DTia.txwnt.cn
http://zaTTyUtQ.txwnt.cn
http://4zYhT8aV.txwnt.cn
http://554jRnbo.txwnt.cn
http://wAWtxA61.txwnt.cn
http://AQOT6nER.txwnt.cn
http://k6RZaWg4.txwnt.cn
http://Zo6cK1oI.txwnt.cn
http://U6c1XaVn.txwnt.cn
http://3Yo4fKys.txwnt.cn
http://uC8u5919.txwnt.cn
http://fXJ8OYBK.txwnt.cn
http://vPJBwzC3.txwnt.cn
http://DSzmTj1V.txwnt.cn
http://qaEQlDYq.txwnt.cn
http://hCKnK97M.txwnt.cn
http://mRgC455A.txwnt.cn
http://IdoXdYIq.txwnt.cn
http://www.dtcms.com/a/136899.html

相关文章:

  • 从 SQL2API 到 Text2API:开启数据应用开发的新征程
  • Android: gradient 使用
  • DAY 46 leetcode 459--字符串.重复的子字符串
  • 学习笔记—C++—模板初阶
  • 「超级桌面TV版下载」超级桌面TV版_安卓电视版免费下载安装教程
  • 芯片封装制造技术分析
  • C语言多进程素数计算
  • 白酒制造主数据管理全链路解析:业务重塑与AI赋能
  • IDEA202403常用快捷键【持续更新】
  • 2025年面板安装 Wordpress 网站教程
  • 【软件测试】测试分类
  • Android ViewStub显示VISIBLE与消失GONE,Kotlin(2)
  • 【数据结构】3.单链表专题
  • 从零开始构建 Ollama + MCP 服务器
  • 数据结构-树与二叉树
  • Fiddler 进行断点测试:调试网络请求
  • Python自动化办公
  • OFDM 信道表示(1)
  • 如何编制实施项目管理章程
  • shardingsphere-jdbc集成Seata分布式事务
  • 大模型提示词prompt
  • 解释`Function.__proto__ === Function.prototype`的结果及原因。
  • c#从ftp服务器下载文件读取csv
  • 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具
  • 小目标、狭长目标检测的一些优化方法
  • RK3588 Buildroot 串口测试工具
  • es6面试常见问题╮(╯▽╰)╭
  • 【C++】Stack和Queue的底层封装和实现
  • 分享一下这几天在公司学到的东西
  • python学习 -- 综合案例1:设计一款基于python的飞机大战小游戏