idc网站是用什么语言做的两个男生如何做网站
- 作者: 多梦笔记
- 时间: 2026年02月16日 23:22
当前位置: 首页 > news >正文
idc网站是用什么语言做的,两个男生如何做网站,网站做cdn服务流量,企业网站建设培训1. 继承的概念及定义 1.1 继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段#xff0c;它允许程序员在保持原有类特征的基础上进行扩展#xff0c;增加功能#xff0c;这样产生新的类#xff0c;称派生类。继承呈现了面向对象程序设计的层次结构…1. 继承的概念及定义 1.1 继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段它允许程序员在保持原有类特征的基础上进行扩展增加功能这样产生新的类称派生类。继承呈现了面向对象程序设计的层次结构填了由简单到复杂的认知过程。继承是类设计层次的复用。 1.2 继承定义 1.2.1 定义格式 1.2.2 继承关系和访问限定符 1.2.3 继承基类成员访问方式的变化 总结 1.基类private成员在派生类中无论以什么方式继承都是不可见的。这里的不可见是指基类的私有成员还是被继承到了派生类对象中但是语法上限制派生类对象不管在类内还是类外都不能去访问它。除非使用父类中公有的成员函数通过这个公有的成员函数间接的访问父类中的私有成员。 抽象你继承了你父亲的产业但是你父亲的私房钱你是不可以继承使用的。你父亲的私房钱是实际存在的如果真的想用父亲的私房钱就需要通过间接的方式比如让你父亲请客这样就间接的使用到父亲的私房钱。 通过上图的调试可以看出基类private成员还是被派生类对象继承了我们通过了公有的Print成员函数访问到了父类中的“_name”和“_age”。 如果我们不通过公有成员函数访问父类中的私有就会报错如下图 如果基类成员不想在类外直接被访问但需要在派生类中访问那就将private改成protected。如下图 2.通过上面的表格我们可以发现基类的其他成员在子类的访问方式Min(成员在基类的访问限定符继承方式)publicprotectedprivate。 比如 但是protected的继承方式子类中是可以调用Public成员函数的。如下图 再比如子类通过私有方式继承父类子类继承父类中所有的成员包含公有成员、保护成员、私有成员私有成员不能直接访问但这些成员在子类中变成了私有。 3.使用关键字class时默认的继承方式是private使用strcut时默认的继承方式是public不过最好显示的写出继承方式。 5.在实际运用中一班使用都是public继承几乎很少使用protected/private继承也不提倡使用protected/private继承因为protected/private继承下来的成员都只能在派生类的类里面使用实际中扩展维护性不强。
- 基类和派生类对象赋值转换 ①派生类对象可以赋值给基类的对象/基类的指针/基类的引用。这里有个形象的说法叫切片或者切割。指把派生类中父亲的那部分切来赋值过去。 我们先来看一个其他东西。如下图 上图b在给a当别名的时候因为类型不匹配产生的临时变量是常量导致权限放大所以加上了const。这是类型转换。 而我们的赋值转换在引用的时候并没有加上const如下图。因为他们两个不是一个东西赋值转换是一个特殊语法规则。注意区分 ②赋值兼容转换主要适用于公有继承的情形。在私有或保护继承的情况下这种转换通常会导致编译错误或者运行时错误。因为私有继承和保护继承改变了基类成员的访问性基类的接口与派生类的实际内部结构不匹配。 ③基类对象不能赋值给派生类对象 ④基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引。但是必须是基类的指针是指向派生类对象时才是安全的。这里基类如果是多态类型可以使用RTTI的dynamic cast来进行识别后进行安全转换。以后的文章会涉及这边初步了解 通过下图我们可以直观看见子类对象可以赋值给父类对象/指针/引用并且父类对象指向/引用子类中父类的部分。 3. 继承中的作用域 1.在继承体系中基类和派生类都有独立的作用域。 2. 子类和父类中有同名成员子类成员将屏蔽父亲对同名成员的直接访问这种情况叫隐藏也叫重定义。 这个不是重载重载是在同一作用域下而父类和子类是两个独立的作用域出现同名是隐藏。 在子类成员函数中可以使用基类::基类成员 显示访问 正如下图中父类有Public则调用父类的 如果子类有则调用Public 所以查找规则就是就近原则有子类用子类没有子类用父类。 如果有子类的情况下非要调用父类的话可以使用基类::基类成员 显示访问如下图 3.需要注意的是如果成员函数的隐藏只需要函数名相同就构成隐藏。 即使参数不一样 4.注意在实际中在继承体系里面最好不要定义同名成员。 4.派生类的默认成员函数 默认构造函数①我们没有写编译器自己生成的 ②全缺省的 ③不需要传参的 1.派生类的构造函数必须调用基类的构造函数初始化基类的那一部分成员。如果基类没有默认的构造函数则必须在派生类构造函数的初始化列表阶段显示调用。可以把父类当做一个整体相当于是子类中的一个自定义成员对象 如果子类调用默认构造但是父类中没有默认构造就会报错 修改方式如下图在子类中显示调用父类的构造函数 要不然就是父类中也有一个默认构造函数 2.拷贝构造函数 如果不需要深拷贝可以不用我们自己写使用编译器生成的默认拷贝构造完成拷贝初始化 如果在子类中需要深拷贝则在子类中手动完成拷贝构造并及时传父类部分完成父类的拷贝 如果父类中需要深拷贝直接使用子类传来对应父类的值再完成深拷贝 3.operator 如果不需要赋值深拷贝直接使用编译器自动生成的默认赋值 如果需要子类中需要赋值深拷贝则在子类中手动完成operator并及时传父类部分完成父类部分的赋值如下图 如果父类中需要赋值深拷贝直接使用子类传来对应父类的值再完成赋值深拷贝 4.完成构造的时候都是先父后子。初始化列表初始化顺序是按照声明的顺序初始化的而父类是最先声明的所以在子类初始化列表中无论是否显示切片传值给父类都是先初始化父类。所以构造是可以保证先父后子的。 5.完成析构函数是先子后父。如果顺序相反则可能导致资源管理上的问题特别是当基类和派生类都包含需要清理的资源时。 为了保证先子后父在完成子类的析构函数后自动调用父类的的析构函数清理基类成员。 如果遇到这种情况呢如下图下图直接就只调用了父类的析构导致子类中资源没有被清理。 表面上析构是~类名其实本质上析构函数都是同一个名字destructor所以这边父类和子类的析构就构成了隐藏的关系。这边ptr是父类对象在析构时就调用了父类的析构函数。 那怎么样我们才能调用到子类的析构函数呢如下图 正如上图所示在父类的析构函数上面加一个virtual。ptr是父类对象但是指向的是子类加上virtual形成多态就可以指向谁就调用谁的函数。这样这边就调用了子类的析构再自动调用父类的析构函数。关于多态将会在本篇文章的下一篇文章中呈现 5. 继承与友元 友元关系不能被继承 也就是说基类友元不能访问子类私有和保护成员。 除非基类友元也是子类的友元 可以这样抽象理解父亲的朋友不是你的朋友基类友元不能访问子类私有除非你和你父亲的朋友成为朋友基类友元也成为子类的友元。 6. 继承与静态成员 基类定义了static静态成员则整个继承体系里面只有一个这样的成员。 无论派生出多少个子类都只有一个static成员实例。 7. 复杂的菱形继承及菱形虚拟继承 单继承一个子类只有一个直接父类时称这个继承关系为单继承 多继承一个子类有两个或者以上直接父类时称这个继承关系为多继承 菱形继承菱形继承是多继承的一种特殊情况 菱形继承的问题菱形继承有数据冗余数据重复和二义性两种意思的问题。 上图可以看出在Assistant中他的两个父类Student和Teacher都包含Person所以Assistant中有两个Person。导致访问_name的时候不知道访问的是Student中的_name还是Teacher中的_name。 在下图中通过指定作用域的方式解决了数据二义性的问题。 怎么办呢既可以解决二义性问题又可以解决数据冗余问题。 虚拟继承可以解决菱形继承的二义性和数据冗余的问题。 正如下图中在Student和Teacher继承时加上了virtual了之后这样在Assistant的对象a中Person的内容就只保留了一份。 8. 继承的总结和反思
- 很多人说C语法复杂其实多继承就是一个体现。有了多继承就存在菱形继承有了菱形继承就有菱形虚拟继承底层实现就很复杂。所以一般不建议设计出多继承一定不要设计出菱形继承。否则在复杂度及性能上都有问题。
- 多继承可以认为是C缺陷之一很多后来的语言都没有多继承如Java。
- 继承和组合 public继承是一种is-a的关系。也就是说每个派生类对象都是一个基类对象。组合是一种has-a的关系。假设B组合了A每个B对象中都有一个A对象。优先使用对象组合而不是继承。继承允许你根据基类的实现来定义派生类的实现。这种通过生成派生类的复用通常被称为白箱复用。术语“白箱”是相对可视性而言在继承方式中基类的内部细节对子类可见 。继承一定程度破坏了基类的封装基类的改变对派生类有很大的影响。派生类和基类间的依赖关系很强耦合度高。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用(black-box reuse)因为对象的内部细节是不可见的。对象只以“黑箱”的形式出现。 组合类之间没有很强的依赖关系耦合度低。优先使用对象组合有助于你保持每个类被封装。实际尽量多去用组合。组合的耦合度低代码维护性好。不过继承也有用武之地的有些关系就适合继承那就用继承另外要实现多态也必须要继承。类之间的关系可以用继承可以用组合就用组合。 好了本篇文章就到这里~ 欢迎指正批评~
- 上一篇: idc网站备案网站开发新动力
- 下一篇: IDC网站用什么软件建英雄联盟韩国
相关文章
-
idc网站备案网站开发新动力
idc网站备案网站开发新动力
- 站长
- 2026年02月16日
-
icp网站建设网页设计培训图片
icp网站建设网页设计培训图片
- 站长
- 2026年02月16日
-
icp网站建设黄页网站代码
icp网站建设黄页网站代码
- 站长
- 2026年02月16日
-
IDC网站用什么软件建英雄联盟韩国
IDC网站用什么软件建英雄联盟韩国
- 站长
- 2026年02月16日
-
idc销售网站php源代码宁波互联网
idc销售网站php源代码宁波互联网
- 站长
- 2026年02月16日
-
idea 网站开发为wordpress 转 app
idea 网站开发为wordpress 转 app
- 站长
- 2026年02月16日
