美文网首页
C++学习第15课,多态

C++学习第15课,多态

作者: Mr小熊_1da7 | 来源:发表于2019-06-16 18:00 被阅读0次

1 多态是什么

多态指的是同样的方法,可以针对不同的参数,调用不同的函数。

之前的时候我们说过函数的覆写。

class Human{

public:

void ecting(void)

{

cout << "Human use hand"<<endl;

}

};

class Englishman : public Human{

public:

void ecting(void)

{

cout << "Englishman use Knife"<<endl;

}

};

class Chinese : public Human{

public:

void ecting(void)

{

 cout << "Chinese use chopsticks"<<endl;

 }

};
void text_ecting(Human &p)

{

p.ecting();

}

int main(int argc, char **argv)

{

Human h;

Englishman e;

Chinese c;

text_ecting(h);

text_ecting(e);

text_ecting(c);

return 0;

}

这里text_ecting(h);

text_ecting(e);

text_ecting(c);都是会调用基类的方法,因为text_ecting 的参数是Human

2 虚函数

virtual void ecting(void)

{

cout << "Human use hand"<<endl;

}

这里只要将基类的void ecting这个方法修改成virtual。

那这个方法就可以调用各自的void ecting方法了。

3 虚函数的原理

机制:静态联编,动态联编;

对于非虚函数,在编译时,就确定好了调用哪个函数;

对于类内有虚函数的,内部有一个指针,指向虚函数表;这个指针可以帮助我们调用对应的虚函数。

4 多态的规定

1 方法只有调用指针和应用才有多态。

如:text_func(Human *h);text_func(Human &h);可以多态;text_func(Human h);没有多态。

2 只有类的成员函数才可以声明为virtual。

3 静态成员函数不能是虚函数。

4 内联函数不能是虚函数。类内的函数,如果没有加上virtual,那默认是内联函数。

5 构造函数不能是虚函数。

6 析构函数一般都申明为虚函数。(析构,之前写错了。不好意思)

7重载:虚函数参数不同,不可以设置为虚函数;

覆盖:函数参数、返回值相同,可以设为虚函数。

8返回值例外,正常情况下返回值不同,不能设置为虚函数,不过如果返回值为单签对象的指针或应用时,可以设置为虚函数。

*注意

复习Human *h = new Human;可以调用delete 来删除;

且销毁时,先调用自身的析构函数,再调用父类的析构函数时

相关文章

  • 深刻剖析之c++博客文章

    三大特性 封装、继承、多态 多态 C++ 虚函数表解析C++多态的实现原理 介绍了类的多态(虚函数和动态/迟绑定)...

  • C++学习第15课,多态

    1 多态是什么 多态指的是同样的方法,可以针对不同的参数,调用不同的函数。 之前的时候我们说过函数的覆写。 cla...

  • 多态的C++实现

    多态的C++实现 1 多态的原理 什么是多态?多态是面向对象的特性之一,只用父类指针指向子类的对象。 1.1 多态...

  • C++ 的多态(Polymorphism), virtual f

    多态 c++支持两种多态,编译时多态和运行时多态但其实编译时多态根本不是真正的多态,编译时多态就是函数的重载,ov...

  • c++多态 学习笔记

    今天印象最深的就是学习c++多态这一块了,年幼的时候听说过这个东西,但限于当时的眼界太窄,对于这块东西没有深入研究...

  • C++学习(6)多态

    1.虚函数和多态 在类的定义中,前面有virtual关键字的成员函数就是虚函数。 virtual关键字只用在类定义...

  • C++学习笔记(3)

    摘要:本篇对C++的三个重点「封装,继承,多态」的学习总结与使用。 很遗憾,在坚持了一段时间c++的学习后,有点想...

  • C++第六篇多态

    C++中的多态性分为编译时多态性和运行时多态性,编译时多态通过函数重载和模板体现,运行多态通过虚函数体现编译、连接...

  • 5-C++远征之离港篇-学习笔记

    C++远征离港篇 离港总动员 C++远征计划的学习者肯定是冲着封装,继承,多态来的。 知识点: 指针 VS 引用 ...

  • 面试题目收集总结

    C++: 多态: 多态性都有哪些?(静态和动态,然后分别叙述了一下虚函数和函数重载) c语言和c++有什么区别?(...

网友评论

      本文标题:C++学习第15课,多态

      本文链接:https://www.haomeiwen.com/subject/wuzefctx.html