首页
学习
活动
专区
圈层
工具
发布

c++继承 基类 派生类 虚函数

参考链接: C++继承 继承    类和类的关系有组合、继承和代理。继承的本质就是代码复用。子类继承父类中的一些东西,父类也称为基类,子类也称为派生类。派生类继承了基类除构造函数以外的所有成员。 ...基类中不同访问限定符下(public、protected、private)的成员以不同的继承方式继承,在派生类中的访问限定也不同,具体如下:  基类的布局优先于派生类  #include派生类的构造函数 派生类的析构可想而知: 1.调用派生类的析构函数 2.调用基类的析构函数  虚函数  如下程序:  class Base { public:     Base...此时基类和派生类的布局如下:     vfptr的指针大小为4(32位机器)。因此基类字节数为8,派生类为12。...main函数中,生成了一个派生类对象。

1.7K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++中派生类对基类成员的访问形式

    C++中派生类对基类成员的访问形式主要有以下两种: 1、内部访问:由派生类中新增成员对基类继承来的成员的访问。 2、对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问。...1、私有继承的访问规则 当类的继承方式为私有继承时,基类的public成员和protected成员被继承后成为派生类的private成员,派生类的其它成员可以直接访问它们,但是在类的外部通过派生类的对象无法访问...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类的成员还是通过派生类的对象,都无法直接访问从基类继承来的private成员,但是可以通过基类提供的public成员函数间接访问。...protected成员,派生类的其它成员可以直接访问它们,但是类的外部使用者不能通过派生类的对象访问它们。...基类的private成员在私有派生类中是不可直接访问的,所以无论是派生类成员还是通过派生类的对象,都无法直接访问基类中的private成员。

    3.3K70

    C++类型转换详解

    一、内置 转 内置 C++兼容C语言,在内置类型之间转换规则和C语言一样的,C/C++语言因为允许类型转换所以不是类型安全的语言。...二、内置 转 自定义 c++中支持内置类型转自定义类型,只需要提供相应的构造函数,就可以想怎么转就怎么转,全在于你的构造函数怎么实现。...三、自定义 转 内置 c++中支持自定义类型转内置类型,提供相应的运算符重载函数(operator),同样可以想怎么转就怎么转,都是自己设定的。...比如在c++智能指针shared_ptr中使用了operator bool()把指针转换为bool类型来判断指针是否为空,如下: 测试如下: #include #include 派生类转基类也叫切片,天然就可以实现的,但是基类转派生类可能会存在越界访问的问题。用这个关键字可以有效避免。

    28010

    C++中的类型转换

    C++的类型转换 零、前言 一、C语言的类型转换 二、C++强制类型转换 1、static_cast 2、reinterpret_cast 3、const_cast 4、dynamic_cast 5、...,就需要发生类型转化 C语言中的两种形式的类型转换: 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译失败 显式类型转化:需要用户自己处理 示例: void Test () {...+提出了自己的类型转化风格,注意因为C++要兼容C语言,所以C++中还可以使用C语言的转化风格 二、C++强制类型转换 标准C++为了加强类型转换的可视性,引入了四种命名的强制类型转换操作符:static_cast...注意: 上行转换(派生类—->基类)是安全的;下行转换(基类—->派生类)由于没有动态类型检查,所以是不安全的。...进行标明和替换 dynamic_cast,命名上理解是动态类型转换 使用场景: 只有在派生类之间转换时才使用dynamic_cast,type-id必须是类指针,类引用或者void 使用特点:

    3.1K20

    C++拓展:从类型安全到RTTI,带你吃透 C++ 类型转换!

    适用场景: 基本数据类型之间的转换(如double转int、int转long); 非 const 类型的指针 / 引用之间的转换(如基类指针转派生类指针,但无运行时检查); 右值引用的转换(如static_cast...3.5 dynamic_cast:“智能派”,运行时类型检查 dynamic_cast是唯一支持运行时类型识别的命名转换,专门用于将基类的指针 / 引用安全地转换为派生类的指针 / 引用。...适用场景: 基类指针 / 引用指向派生类对象时,需要转换为派生类指针 / 引用以访问派生类的成员。...5.4 基类 / 派生类转换优先用 dynamic_cast 避免用 C 风格强制转换将基类指针转为派生类指针,除非能 100% 确定基类指针指向派生类对象。...5.5 注意隐式转换的 “坑” 无符号整形(如size_t)与有符号整形(如int)比较时,有符号整形会被隐式转换为无符号整形,可能导致死循环; 浮点数转整形会截断小数部分,需确认是否符合业务逻辑。

    13610

    【C++】继承 - 从基类到派生类的代码复用逻辑

    寓意把派生类中基类那部分切出来,基类指针或引用指向的是派生类中切出来的基类那部分。 基类对象不能赋值给派生类对象。 基类的指针或者引用可以通过强制类型转换赋值给派生类的指针或者引用。...继承中的作用域 3.1 隐藏规则 在继承体系中基类和派生类都有独立的作用域。 派生类和基类中有同名成员,派生类成员将屏蔽基类对同名成员的直接访问,这种情况叫隐藏。...因为这样才能保证派生类对象先清理派生类成员再清理基类成员的顺序。 派生类对象初始化先调用基类构造再调派生类构造。 派生类对象析构清理先调用派生类析构再调基类的析构。...,但是基类的构成函数私有化以后,派生类看不见就不能调用了,那么派生类就无法实例化出对象。...多继承可以认为是C++的缺陷之一,后来的⼀些编程语言都没有多继承,如Java。

    84510

    c++类型转换与RTTI运行阶段类型识别

    我们都知道C++完全兼容C语言,C语言的转换方式很简单,可以在任意类型之间转换,但这也恰恰是缺点,因为极其不安全,可能不经意间将指向const对象的指针转换成非const对象的指针,可能将基类对象指针转成了派生类对象的指针...所以C++引入的这几种类型转换可以完美的解决上述问题,不同场景下不同需求使用不同的类型转换方式,同时有利于代码审查。孙悟空都只有七十二变,不能瞎变,所以c++给类型转换做了限制。...static_cast是用得最多的一类类型转换符,常见的枚举值转成整形,float转整形之类的,都是可以的。...另外,static_cast还可以将派生类指针转换为基类指针,而且一定条件下还能将基类指针转换为派生类指针,且不会报错,只是一些只有派生类才会有的函数、成员变量,转换过来的指针也不会有。...目前c++中有3个支持RTTI的元素:dynamic_cast,将一个指向基类的指针来生成一个指向派生类的指针,否则,该运算符将返回空指针typeid,返回一个指针对象类型的值type_info,结构存储了有关特定类型的信息

    55100
    领券