好贷网好贷款

继承与多态(下)

发布时间:2016-12-5 8:36:54 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"继承与多态(下)",主要涉及到继承与多态(下)方面的内容,对于继承与多态(下)感兴趣的同学可以参考一下。

函数重载: 必须在同一个类中进行 子类无法重载父类的函数,父类同名函数将被覆盖 重载是在编译期间根据参数类型和个数决定调用函数 函数重写: 必须发生于父类与子类之间 并且父类与子类中的函数必须有完全相同的原型 使用virtual声明之后能够产生多态 多态是在运行期间根据具体对象的类型决定调用函数 C++中多态的实现原理: 当类中声明虚函数时,编译器会在类中生成一个虚函数表 虚函数表是一个存储类成员函数指针的数据结构 虚函数表是由编译器自动生成与维护的 virtual成员函数会被编译器放入虚函数表中 存在虚函数时,每个对象中都有一个指向虚函数表的指针 对象中的VPTR指针什么时候被初始化? 对象在创建的时候由编译器对VPTR指针进行初始化 只有当对象的构造完全结束后VPTR的指向才最终确定 父类对象的VPTR指向父类虚函数表 子类对象的VPTR指向子类虚函数表 结论:构造函数中调用虚函数无法实现多态 用Shape作为基类进行继承 class Rectangle : public Shape {     double m_a;     double m_b; public:     Rectangle(double a, double b)//求矩形的面积     {         m_a = a;         m_b = b;     }          double area()     {         return m_a * m_b;     } }; class Circle : public Shape//求圆的面积 {     double m_r; public:     Circle(double r)     {         m_r = r;     }          double area()     {         return 3.14 * m_r * m_r;     } }; 纯虚函数是只声明函数原型,而故意不定义函数体的虚函数。 抽象类与纯虚函数: 抽象类不能用于定义对象 抽象类只能用于定义指针和引用 抽象中的纯虚函数必须被子类重写 函数重载与函数重写不同 多态是通过虚函数表实现的 虚函数在效率上会受到影响 抽象类可用于表示现实世界中的抽象概念 抽象类是通过纯虚函数实现的

上一篇:poj1312 dfs 深度优先搜索
下一篇:zip error: Invalid command arguments

相关文章

相关评论