尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

记录C++ 8

记录C++ 8 多态多态是指同一个接口可以有多种不同的实现方式,多态在c中分静态多态和动态多态静态多态使用函数重载和泛型编程实现动态多态基于虚函数实现动态绑定与静态绑定定义静态绑定指程序结束编译后就已经确定行为动态绑定指在运行时确定行为作用把不同派生类对象都当作基类看可以屏蔽不同子类对象之间的差异提高程序的通用性适应需求的不断变化虚函数与动态多态的实现在函数名字前加上virtual关键字进行声明创建2个类并且是继承关系基类的函数声明为虚函数派生类继承基类并重写基类的函数通过基类的指针或引用访问派生类对象非类的成员函数不能定义为虚函数类的静态成员函数不能定义虚函数构造函数不能定义为虚函数析构函数可以定义为虚函数基类的某个函数声明为虚函数派生类同名函数自动成为虚函数#include iostream using namespace std; class A { public: virtual void add() {} }; class B : public A { public: void add() {} };重写重写的定义派生类实现基类的虚函数特点不同作用域函数名相同参数相同返回值相同基类必须要virtual关键字原理通过父类指针或引用指向子类对象重载重载的定义同一作用域函数名相同参数不同的多个函数间构成重载特点相同作用域函数名相同参数不同返回值可有可无virtual关键字可有可无隐藏定义基类与派生类有同名函数调用时候都是子类的函数此时父类成员函数会被隐藏特点不同作用域函数名相同返回值和参数可同可不同子类对象调用重新实现与父类函数同名的函数隐藏与覆盖的区别相同点子类对象在调用时都是调用子类实现的成员函数不同点父类指针指向子类对象时 覆盖情况下父类指针调用的函数是子类实现的函数父类指针指向子类对象时 隐藏情况下父类指针调用的函数是父类实现的函数虚析构函数建议将基类的析构函数设置为虚函数基类的析构函数为虚函数则派生类的析构函数也会自动成为虚函数当基类的指针指向派生类时基类的析构函数不是虚函数就不会发生动态多态只会调用基类的析构函数就会造成内存泄漏#include iostream using namespace std; class A { private: int i; public: A() : i(10) { cout haha endl; } virtual ~A() { cout xixi endl; } }; class B : public A { private: int x; public: B() : x(5) { cout aabbcc endl; } ~B() { cout qqwwee endl; } }; int main() { A *p new B; delete p; return 0; }
返回列表