展开

关键词

首页关键词c c++ 类继承

c c++ 类继承

相关内容

  • C++ 类的继承与派生

    继承性是面向对象程序设计最重要的特性之一,使软件有了可重用性,C++提供的类的继承机制。继承与派生的概念一个新类从已有的类那里获得已有的特性,这种现象称为类的继承。同样也可以说成已有的类派生出来了新的类。类A继承自类B也就是类B派生了类A。所以继承和派生的关系就像小学时把字句和被字句的造句一样。有了继承与派生后,就有了父类基类与子类派生类,C++中将类B称为父类基类,将类A称为子类派生类。派生类的声明:#include using namespace std; class Student 基类的声明{public: Student() { num = 1; name = Z; sex =
    来自:
    浏览:368
  • 怎样防止C++中的类继承?

    最近,我的一个朋友问我如何防止C++中的类继承。 三个答案。不知道哪一个是最好的。(); return b1; } private: CBase() { } CBase(CBase3) { } CBase& operator=(CBase&) { } }; 2)使用CSealed基类、{ public: CBase() { } }; 3)使用CSealed基类、受保护的ctor和虚拟继承 class CSealed{ protected: CSealed() { } }; classCBase : virtual CSealed{ public: CBase() { } }; 以上所有方法都确保CBase类不能进一步继承。2)方法2和方法3除非CSeared类被严格继承,否则无法工作。那是为什么?这和vdisp PTR有关系吗?
    来自:
    回答:2
  • 广告
    关闭

    腾讯「技术创作101训练营」第三季上线!

    快来报名!

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到
  • 《挑战30天C++入门极限》C++类的继承与多重继承的访问控制

    C++类的继承与多重继承的访问控制   在前面的练习中我们一直在使用public的继承方式,即共有继承方式,对于protected和private继承方式,即保护继承与私有继承方式我们并没有讨论。  对于单个类来说,讨论保护继承与私有继承的区别意义是不大的,他们的区别只在多级继承的情况中体现。   为私有继承,a1已经转变为private a3=3;错误,由于Base类成员为私有的,PrivateClass类也为私有继承 } }; ---------------------------------a2 = 2;a2仍然保持protected a3=3;错误,由于Base类成员为私有成员,即使是上级父类是公有继承,也不能改变Base类成员的控制类型 } }; ------------------、保护继承与私有继承的区别与特点已经了解,最后再提醒一下读者,在继承关系中,基类的private成员不但对应用程序隐藏,即使是派生类也是隐藏不可访问的,而基类的保护成员只对应用程序隐藏,对于派生类来说是不隐藏的
    来自:
    浏览:155
  • 《挑战30天C++入门极限》图文例解C++类的多重继承与虚拟继承

    图文例解C++类的多重继承与虚拟继承   在过去的学习中,我们始终接触的单个类的继承,但是在现实生活中,一些新事物往往会拥有两个或者两个以上事物的属性,为了解决这个问题,C++引入了多重继承的概念,C++允许为一个派生类指定多个基类,这样的继承结构被称做多重继承。举个例子,交通工具类可以派生出汽车和船连个子类,但拥有汽车和船共同特性水陆两用汽车就必须继承来自汽车类与船类的共同属性。   由此我们不难想出如下的图例与代码: ?   
    来自:
    浏览:135
  • 《挑战30天C++入门极限》图例实解:C++中类的继承特性

    图例实解:C++中类的继承特性   整个c++程序设计全面围绕面向对象的方式进行,类的继承特性是c++的一个非常非常重要的机制,继承特性可以使一个新类获得其父类的操作和数据结构,程序员只需在新类中增加原有类中没有的成分可以说这一章节的内容是c++面向对象程序设计的关键。   下面我们简单的来说一下继承的概念,先看下图: ?以此类推,层层递增,这种子类获得父类特性的概念就是继承。   笔者写到这里的时候不得不提一下,我有开发c#与java的经验,就这两种语言来说,学到这里的时候很多人很难理解继承这一部分的内容,或者是理解的模糊不清,其实正是缺少了与this指针相关的c++知识,多数高级语言的特性是不涉及内存状态的操作由上面的例程我们知道Car类是Vehicle类的派生类(子类),c++规定,创建派生类对象的时候首先调用基类的构造函数初始化基类成员,随后才调用派生类构造函数。   
    来自:
    浏览:126
  • c++类模板与继承

    当类模板碰到继承时,需要注意一下几点:1.当子类继承的父类是一个类模板时,子类在声明的时候要指定出父类中的类型;2.如果不指定,编译器无法给子类分配内存;3.如果要灵活指定父类中的T的类型,子类也需要变成模板类
    来自:
    浏览:105
  • C++继承与派生(原理归纳)

    C++继承与java不同,java遵循单继承,但java的接口为其不足做了很好的弥补了。 C++则是灵活的多,为多继承。即一个C++类可以同时继承N个类的属性。?2.对于继承方式 :    有三种:  public ,private,protect,对于public继承的类,其公有成员依然是公有成员,私有成员依旧是私有成员。     其中私有继承,其实就是一种绝育的措施。就是以后的继承就没有太大意义。?3.对于继承关于构造和析构顺序原里的归纳:看代码: 1 #include 2 using namespace std ; 3 4 class Base1 { 5 6 public : 7 Base1()
    来自:
    浏览:615
  • 升级到 XML C++ SDK

    如果您细心对比过 JSON C++ SDK 和 XML C++ SDK 的文档,您会发现并不是一个简单的增量更新。如果您想升级到 XML C++ SDK,请参考下面的指引,完成 C++ SDK 的升级工作。功能对比XML C++ SDK 与 JSON C++ SDK 功能对比请查看下表: 功能XML C++ SDKJSON C++ SDK 文件上传支持本地文件、字节流、输入流上传覆盖同名文件简单上传最大支持ConnectTimeoutInms 代替了 CurlConnectTimeoutInms和CurlGlobalConnectTimeoutInms,新增ReceiveTimeoutInms,在 Request 基类中也实现对应设置接口不同区域在 JSON C++ SDK 和 XML C++ SDK 中的对应关系请查看下表: 地域XML C++ SDK 地域简称JSON C++ SDK 地域简称 北京一区(华北)ap-beijing-
    来自:
  • C++实现不能被继承的类——终结类

    问题C++如何实现不能被继承的类,即终结类。Java中有final关键字修饰,C#中有sealed关键字修饰,而C++目前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现。联想到C++的单例模式singleton,也是用到了这个方法,C++的单例模式的实现见如下代码:class CSingleton { private: CSingleton(){}; 构造函数是私有的GetInstance() { if(m_pInstance == NULL) 判断是否第一次调用 m_pInstance = new CSingleton(); return m_pInstance; } }; C++中实现不能被继承的类的最为有效安全方便的方法是使用“虚拟继承”。一个基类如果被虚拟继承,那么在创建它的孙子类的对象时,该基类的构造函数需要单独被调用。此时,如果该基类的构造函数在孙子类的构造函数中无法访问,那么就实现了基类的子类不能被继承。
    来自:
    浏览:414
  • C++虚拟继承与虚基类

    1.多重继承带来的问题C++虚拟继承一般发生在多重继承的情况下。C++允许一个类有多个父类,这样就形成多重继承。多重继承使得派生类与基类的关系变得更为复杂,其中一个容易出现问题是某个基类沿着不同的路径被派生类继承(即形成所谓“菱形继承”),从而导致一个派生类对象中存在同一个基类对象的多个拷贝。image.png 多重继承带来同一个基类对象在派生类对象中存在多个拷贝的问题,考察如下代码。#include #include using namespace std; 人员类class Person{protected: string IDPerson; 身份证号 string Name;姓名public: Person(string s1, string s2){ IDPerson=s1; Name=s2; }}; 学生类class Student:public Person{ int
    来自:
    浏览:136
  • c++ 继承类强制转换时的虚函数表工作原理

    本文通过简单例子说明子类之间发生强制转换时虚函数如何调用,旨在对c++继承中的虚函数表的作用机制有更深入的理解。
    来自:
    浏览:428
  • C++之多继承

    C++支持多继承,其它的面向对象编程语言几乎都不支持多继承。而多继承一旦使用不当就会造成二义性。这可能就是其它语言都不支持多继承的原因。实际来看,几乎没有使用多继承的必要性。: public MyClass{public:}; class C2 : public MyClass{public:}; class Last : public C1, public C2 多继承{};Last类继承自C1和C2类。C1和C2都是继承自MyClass类。#includeMyClass.h int main(){ Last L; L.a; 二义性 return 0;}编译这段代码,会有如下的错误提示。?除非我们明确支持它是调用哪个父类的成员。这样才不会造成二义性。 L.C1::a; L.C2::b;基于此,C++设计了虚继承来解决上述问题的出现。
    来自:
    浏览:127
  • C++ 虚拟继承

    1.为什么要引入虚拟继承虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继 承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如 下:class Aclass B1:public virtual A;class B2:public virtual A;class D:public B1,public B2;虚拟继承在一般的应用中很少用到,所以也往往被忽视,这也主要是因为在C++中,多重继承是不推荐的,也并不常用,而一旦离开了多重继承,虚拟继承就完全失去了存在的必要因为这样只会降低效率和占用更多的空间。为什么需要虚继承?由于C++支持多重继承,那么在这种情况下会出现重复的基类这种情况,也就是说可能出现将一个类两次作为基类的可能性。比如像下面的情况?
    来自:
    浏览:882
  • C++继承

    API 的过程中,每个窗口都有各自的消息处理,而我们封装时不同的窗口要针对不同的消息而编写不同的消息处理函数,不可能所有窗口对于某些消息都进行相同的处理,所以在面向对象的程序设计中,提供了一种新的方式——继承与派生;在c++中将继承的一方称作派生类或者子类,将被继承的一方叫做基类或者父类继承的基本格式如下(CB 继承CA):class CA{public: CA(); ~CA();} class CB : publicCA{public: CB(); ~CB();}派生类中前面相应大小空间的内存保存的是基类的内容,而后面的部分保存的是派生类的内容,这样派生类就可以拥有基类的所有成员,而不必重写代码达到了代码重用的目的在设计中一般将类的共性提取出来作为基类,而将不同的部分从基类派生,作为每个类的特性,对于共性的内容我们只需要在基类中编写,而在派生类中直接使用。下面我们来探讨一下,基类与派生类中构造与析构的调用关系,通过写下面一个简单的小例子:class CA{public: CA(){ cout
    来自:
    浏览:167
  • C++之虚继承

    如果一个类从多个类继承而来,而这些类有公共基类。那么在多该基类中定义的成员访问时会出现二义性。C++设计虚继承来解决这个问题。虚继承的本质就是子类引用父类的内存空间,而不创建自己的内存空间。这样既解决了多重继承可能引发的二义性问题,也使得内存得以释放。在虚继承过程中的基类被叫做:虚基类那么实际上,虚继承的本质就是使用一个指向虚基类的指针,这样就无论你怎么继承,就只有一份基类内存空间。C++使用关键字virtual来进行虚继承。, public C2 多继承{ };int main(){ Last L; L.a; return 0;}通过虚继承,这样MyClass类的内存空间只有一份。这种情况下,虚继承也无法帮到我们。我们只能使用c.A::a;c.B::a;来明确对类成员的调用,从而避免二义性的产生。
    来自:
    浏览:181
  • C++基础-继承

    本文为 C++ 学习笔记,参考《Sams Teach Yourself C++ in One Hour a Day》第 8 版、《C++ Primer》第 5 版、《代码大全》第 2 版。继承是一种复用,不同抽象层次的对象可以复用相同的特性。继承通常用于说明一个类(派生类)是另一个类(基类)的特例。继承的目的在于,通过“定义能为两个或更多个派生类提供共有元素的基类”的方式写出更精简的代码。1. 继承基础本节以公有继承为例,说明继承中的基础知识。(比如鱼类)派生出派生类(比如金枪鱼类),派生类继承基类。1.2 构造函数的继承与覆盖一个类只初始化其直接基类,出于同样的原因,一个类也只继承其直接基类的构造函数。
    来自:
    浏览:183
  • C++继承、虚函数、RTTI、友元类、异常处理

    继承前面讲到c++的继承是子类在继承时声明继承的权限,之前描述有点不够准确。以下时书中提及的能继承的成员。 ?成员函数属性==当使用private继承时,父类的所有public成员在当前子类中会变为private。当使用protected继承时,父类的所有public成员在当前子类中会变为protected。虚函数c++中,被定义为虚函数的成员,能被子类重写,虚函数是用virtual修饰的函数。原理是每个有虚函数的类对象内部维护一个的虚方法表成员,记录包含的方法以及对象的类型信息,虚函数只有在运行期(runtime)才会去动态确定使用哪个实现方法比如:class SuperClass{ public
    来自:
    浏览:124
  • C++终结类

    C++如何实现不能被继承的类,即终结类。Java中有final关键字修饰,C#中有sealed关键字修饰,C++11之前还没有类似的关键字来修饰类实现终结类,需编程人员手动实现。但从C++11开始,提出了final关键字来申明终结类。现在不通过C++11关键词final,来实现一个被能被继承的类。由于任何派生类的对象在创建的时候,都必需在派生类的构造函数中调用父类的构造函数。联想到C++的单例模式Singleton,也是用到了这个方法,C++的单例模式的实现见如下代码:class CSingleton { private: CSingleton(){}; 构造函数是私有的GetInstance() { if(m_pInstance == NULL) 判断是否第一次调用 m_pInstance = new CSingleton(); return m_pInstance; } }; C++中实现不能被继承的类的最为有效安全方便的方法是使用“虚拟继承”。
    来自:
    浏览:165
  • C++核心准则C.10:具体类型要好于类继承

    C.10: Prefer concrete types over class hierarchiesC.10:具体类型要好于类继承译者注:具体类型的定义请参照大师本人作品《C++程序设计语言》第四版的使用继承是需要理由(用例)。这意味着更多的内存消耗,更多的分配和释放动作,同时也需要更多的运行时代价以执行继承带来的间接访问。Note(注意) Concrete types can be stack-allocated and be members of other classes.具体类型可以在堆栈上分配而且成为其他类的成员我们可以使用基类作为某些派生类对象的接口。当动态分配被禁止(例如在硬实时系统中)时,或者为某些插件提供稳定接口是就是这么做的。译者注:间接访问应该指的是使用父类指针访问子类对象的情况。
    来自:
    浏览:117
  • C++接口继承与实现继承的区别和选择

    1.接口继承与实现继承的区别《Effective C++》条款三十四:区分接口继承和实现继承中介绍的比较啰嗦,概括地说需要理解三点: (1)纯虚函数只提供接口继承,但可以被实现; (2)虚函数既提供接口继承在基类CShape中,不能够为每一种不同的图形提供一个默认的draw实现,所以设置为纯虚函数,留给派生类来实现,也就说派生类只是继承了一个借口而已。对于CShape::setColor,将其设置为普通的虚函数,提供一个默认的实现,这样圆和椭圆既可以重新定义,也可以使用基类的默认实现。使用普通的虚函数,派生类既使用了接口继承,也使用了实现继承。2.接口继承与实现继承的选择类设计时,接口继承与实现继承相互独立,代表着一定的设计意义,在二者之间进行选择时,我们需要考虑一个因素:对于无法提供默认版本的函数接口选择函数接口继承,对于能够提供默认版本的函数接口----参考文献读书笔记Effective_C++条款三十四:区分接口继承和实现继承 李健.编写高质量代码:改善C++程序的150个建议.第一版.北京:机械工业出版社,2012.1:314-315
    来自:
    浏览:269

扫码关注云+社区

领取腾讯云代金券