空类有哪些成员函数
class Empty { public: Empty(); // 缺省构造函数 Empty(const Empty&); // 拷贝构造函数 ~Empty(); // 析构函数 Empty& operator=(const Empty&); // 赋值运算符 Empty* operator&(); // 取值运算符 const Empty* operator&() const; // 取值运算符 };
C++多态的实现
C++的多态分为静态多态和动态多态,静态多态是通过重载和函数模版来实现的,动态多态是通过虚函数和继承关系来实现的
void test(int arg){}
void test(char arg){}
void test(int arg1, int arg2){}
derived s(); base* obj = &s; base& obj = s;
当我们希望同一个方法在基类和派生类中的行为是不同的时候,多态就通过虚函数体现出来了。
注意,当把构造函数定义为虚函数时会报错,假如构造函数是虚函数的话,由于对象开始还未分配内存空间,所以根本就无法找到虚函数表,从而构造函数也无法被调用.所以构造函数是不能成为虚函数.
析构函数可以为虚函数, 析构函数设置为虚函数可以保证正确的析构函数序列被调用,我们释放其基类对象时,能使整个类(包括派生类)对象完全释放,如果析构函数只是普通函数,则不能析构完全。
#include <iostream> using namespace std; class base { int a, b; public: void virtual test() { cout << "基类方法!"<<endl; } virtual ~base(){cout<<"基类析构"<<endl;} }; class inheriter:public base{ public: void virtual test(){cout<<"派生类方法!"<<endl;} virtual ~inheriter(){cout<<"派生类析构"<<endl;} }; int main(){ base *b = new inheriter(); b -> test(); delete b; return 0; }
#output
派生类方法!
派生类析构
基类析构
原文:https://www.cnblogs.com/Dancing-Fairy/p/15244554.html