C++中的继承和多态

继承

继承是面向对象程序设计的重要特性,它允许我们在已有类的基础上构造出新的类,在原有的基础上进行更具体的定义,特性和功能。以原有类为基础产生新类可以说成是新类继承了原有类的特征也可以说从原有类派生出新的类。

一,因为派生类是基类的一种,所以任何基类对象的出现的地方都可以用公有派生类对象代替,这也是类型兼容向上原则,这种替代可以分为3种

1.派生类对象可以隐含转化为基类对象。

2.派生类对象可以初始化基类的引用。

3.派生类指针可以隐式转化为基类指针。

二,要注意

(1)如果是公有继承:基类的public成员是派生类的public成员,基类的protected成员是派生类的protected成员,基类的private成员是派生类,是不可访问的。

(2)如果是保护继承:基类的public和protected成员在派生类中是protected成员,基类的private成员在派生类中是不可被访问的。

(3)如果是私有继承:基类的public和protected成员在派生类中是private成员,基类的private成员在派生类中是不可访问的。

三,多重继承和多层继承的区别

多重继承

不仅可以从基类派生一个类,还可以从派生类派生一个类。

eg:class A{......}

       class B : public A {.....}   

       class C : public B{.....}   //类B派生基类A,类C派生自派生类B

多重继承

为一个派生类指定多个基类,这样的继承结构被称作多重继承

eg:class A {.....}

       class B {......}

       class C : public A , public B {....}   //类C同时是类A和类B的子类

但如果派生类所继承的多个基类有相同的基类,而派生类对象需要调用这个先类的接口方法,容易出现错误

多态

编译时多态被称为静态联编,是指在程序编译时就可以确定的多态性,通过重载机制实现

运行时多态被称为动态联编,是指必须在运行中才能确定的多态性,通过继承和虚函数是来实现

多态的前提是必须存在继承和实现的关系

要注意

1.子父类存在同名的成员变量时,访问的是父类的成员变量

2.子父类存在同名的非静态的成员函数时,访问的是子类的成员函数

3.子父类存在同名的静态的成员函数时,访问的是父类的成员函数,不能访问子类特有的成员

虚函数

对于虚函数要注意,如果一个函数在基类中被声明为virtual,那么在所有的派生类中它都是virtual,也就是说虚函数具有继承性,但为了程序的可读所以在派生类中再次使用virtual声明。并且virtual只对函数声明有意义,在函数定义时,不能再次使用。

虚函数必须是non-static成员函数

eg:class Circle

     {

      public : virtual double area (  )

      };

而且关键字virtual不能在类声明之外使用。在定义一个非内联成员函数时,使用关键字virtual是错误的

eg:class b {

public:

virtual void mf (  ):    //正确的

};

virtual viod b::mf ( )    //错误

{....};

使用多态的好处可以减少函数的数量,在继承关系中可以把不同的子类对象都当做父类来看,可以屏蔽不同子类对象之间的差异,写出通用的代码,并且不必为每个派生类编写功能调用,只需要对抽象基类进行处理,极大地提高了程序的可复用性,派生类的功能可以被基类的方法或者引用变量所调用这被称为向下兼容。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C++继承多态和虚函数是面向对象编程的重要概念。 继承是指一个类可以从另一个类继承属性和方法。子类可以继承父类的公有成员和保护成员,但不能继承私有成员。通过继承,子类可以重用父类的代码,并且可以添加自己的特定功能。继承可以实现代码的重用和层次化的设计。 多态是指同一个函数可以根据不同的对象调用不同的实现多态可以通过虚函数来实现。虚函数是在基类声明为虚拟的函数,它可以在派生类被重写。当通过基类指针或引用调用虚函数时,实际调用的是派生类实现。这样可以实现动态绑定,即在运行时确定调用的函数。 虚函数的原理是通过虚函数表来实现的。每个包含虚函数的类都有一个虚函数表,其存储了虚函数的地址。当调用虚函数时,编译器会根据对象的类型在虚函数表查找对应的函数地址并调用。 综上所述,C++继承多态和虚函数是实现面向对象编程的重要机制,它们可以提高代码的灵活性和可扩展性。 #### 引用[.reference_title] - *1* *3* [C++多态之 虚函数和虚函数表](https://blog.csdn.net/weixin_46053588/article/details/121231465)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [c++多态及虚函数表内部原理实战详解](https://blog.csdn.net/bitcarmanlee/article/details/124830241)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值