剧院网站建设,徐汇制作网站哪家好,wordpress插件 介绍,建立网站商城建议虚函数 调用虚函数时函数行为将根据对象所属类的不同而变化。 父类指针或引用指向子类对象时#xff0c;可访问子类重写方法#xff08; virtual函数#xff09;但无法访问在父类中没有定义的子类方法和数据成员。 #include iostreamusing namespace std;class Supe…虚函数 调用虚函数时函数行为将根据对象所属类的不同而变化。 父类指针或引用指向子类对象时可访问子类重写方法 virtual函数但无法访问在父类中没有定义的子类方法和数据成员。 #include iostreamusing namespace std;class Super
{
public:Super(){}virtual void where(){coutthere is Superendl;}
};class Sub :public Super
{
public:Sub(){}virtual void where(){coutthere is Subendl;}void what(){coutwhat?;}
};int main()
{Sub sub;Super* ptr sub;Super ref sub;sub.where();ptr-where();ref.where();return 0;
} 运行结果 通过ptr和ref访问的where均为子类方法无法访问子类的what方法。 所有析构函数都应该声明为虚函数至少祖先类的析构函数应声明为virtual 一个函数被声明为virtual即使在它子类中没有显式的指出该函数依然是virtual。 如果父类的析构函数没有声明为virtual当delete一个实际指向子类对象的父类指针时析构函数调用链将被破坏。 #include iostreamusing namespace std;class Something
{
public:Something(){cout 1;}~Something(){cout1;}
};class Super : public Something
{
public:Super(){cout2;}~Super(){cout2;}
};class Sub :public Super
{
public:Sub(){cout3;}~Sub(){cout3;}
};int main()
{Super* ptr new Sub;delete ptr;return 0;
} 运行结果 将Something的析构函数声明为virtual后结果就为“123321”了。 转载于:https://www.cnblogs.com/baiyideng/p/3601452.html