第五章 C++继承,多态,虚函数

前言 C++  学习路线,本人主要也是为了记录一下自己的学习过程

目录

一、继承

二、多态

三、纯虚函数

四、总结


一、继承

1、继承

  class A: B

 默认为private 私有继承 ,不能调用父类的public方法

 B是基类,A称为子类或者派生类

2、多继承

   一个子类可以有多个父类,它继承了多个父类的特性。

  class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,…

  亲注意 java语法不支持多继承的但C++支持 


二、多态

多种形态 当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态

> 静态多态(静态联编)是指在编译期间就可以确定函数的调用地址,通过**函数重载****模版(泛型编程)**实现

> 动态多态(动态联编)是指函数调用的地址不能在编译器期间确定,必须需要在运行时才确定 ,通过**继承+虚函数** 实现

class Parent {
public:
     void test() {
        cout << "parent" << endl;
    }
};

class Child :public Parent {
public:
    void test() {
        cout << "child" << endl;
    }
};


Parent *c = new Child();
// 编译期间 确定c 为 parent 调用parent的test方法
c->test();

//修改Parent为virtual 虚函数 动态链接,告诉编译器不要静态链接到该函数
virtual void test() {
        cout << "parent" << endl;
}
//动态多态 调用Child的test方法
c->test();


三、纯虚函数

class Parent {
public:
    //纯虚函数 继承自这个类需要实现 抽象类型
    virtual void test() = 0;
};

class Child :public Parent {
public:
    void test(){}
};

四、总结

> 构造函数任何时候都不可以声明为虚函数

> 析构函数一般都是虚函数,释放先执行子类再执行父类

1 成员函数重载特征:

   a 相同的范围(在同一个类中)

   b 函数名字相同

   c 参数不同

   d virtual关键字可有可无

2 重写(覆盖)是指派生类函数覆盖基类函数,特征是:

   a 不同的范围,分别位于基类和派生类中

   b 函数的名字相同

   c 参数相同

   d 基类函数必须有virtual关键字

3 重定义(隐藏)是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

   a 如果派生类的函数和基类的函数同名,但是参数不同,此时,不管有无virtual,基类的函数被隐藏。

   b 如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有vitual关键字,此时,基类的函数被隐藏。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值