C++基础09(继承后续)

文章目录

⼆义性问题

在多继承时,基类与派⽣类之间或基类之间出现,当一个派生类继承多个父类,如果多个父类中存在同名成员,此时派生类对象在调用该同名成员时所出现访问的不确定性 这个叫二义性问题

c 复制代码
class A{
    public:
    void f();
};
class B{
    public:
    void f();
    void g();
};
class C:public A,public B
{
    public:
    void g();
    void h();
};

如果定义 C c1; 则c1.f()具有⼆义性问题,c1.g()⽆⼆义性问题(同名隐藏)

当派生类的成员与父类的成员出现重名,此时派生类对象在调用该重名成员时,优先调用派生类的

解决方法:

  • 在派生类中对多个父类中的同名方法进行重写
  • 派生类对象在调用父类的同名方法时,在方法名前加父类名做个限定

基类与派⽣类的转换

不同类型数据之间在⼀定的条件下可以进⾏类型的转换,⽐如可以把⼀个整数类型赋值给float类型,但是不能把整数类型赋值给指针类型。这种不同类型之间的⾃动转换和赋值称为赋值兼容。

基类与派⽣类型对象之间也有赋值兼容关系,因为派⽣类中包含从基类继承的成员,因此可以将派⽣类的值赋值给基类对象

示例:

c 复制代码
class per
{
    public:
    string name;
    int age;
    void run()
    {
        cout<<name<<age;
    }
};

class stu:public per
{
    public:
    int stu_id;
    string class_name;
    stu()
    {
        name="ljs";
        age=12;
        stu_id=1000;
    }
};

int main()
{
    per a;
    stu s; 
    a=s;
    a.run();
    return 0;
}
//所谓的赋值只是对数据成员赋值,对成员函数不存在赋值问题。
//赋值后不能试图通过a去取访问派⽣类对象s的成员

小贴士:

  • 只能⽤⼦类对其基类对象赋值,⽽不能使⽤基类对象对其⼦类赋值。因为基类对象不包含派⽣类成员,另外对于同⼀基类的不同派⽣类对象之间不能赋值。

  • 如果函数的参数是基类对象或基类对象的引⽤,函数调⽤时的实参可以是派⽣类对象。(在实现动态多态中较为常⻅)

相关推荐
HellowAmy6 小时前
我的C++规范 - 玩一个小游戏
开发语言·c++·代码规范
自学不成才6 小时前
深度复盘:一次flutter应用基于内存取证的黑盒加密破解实录并完善算法推理助手
c++·python·算法·数据挖掘
玖釉-9 小时前
[Vulkan 学习之路] 08 - 给图片穿马甲:图像视图 (Image Views)
c++·windows·图形渲染
m0_748250039 小时前
C++ 信号处理
c++·算法·信号处理
yuyanjingtao9 小时前
动态规划 背包 之 凑钱
c++·算法·青少年编程·动态规划·gesp·csp-j/s
scx2013100410 小时前
20260112树状数组总结
数据结构·c++·算法·树状数组
星竹晨L11 小时前
【C++内存安全管理】智能指针的使用和原理
开发语言·c++
智者知已应修善业11 小时前
【C语言 dfs算法 十四届蓝桥杯 D飞机降落问题】2024-4-12
c语言·c++·经验分享·笔记·算法·蓝桥杯·深度优先
玖釉-11 小时前
[Vulkan 学习之路] 09 - 显卡的流水线工厂:图形管线概览 (Graphics Pipeline)
c++·windows·图形渲染
无限进步_12 小时前
【C语言&数据结构】二叉树遍历:从前序构建到中序输出
c语言·开发语言·数据结构·c++·算法·github·visual studio