C++ 中关键字:virtual 修改函数;
虚函数声明:virtual void myFunc(int nPara1, int nPara2){};声明后子类可以去重写基类此方法也可以不重写,不重写将继承基类此属性;
纯虚函数声明:virtual void myFunc(int nPara1, int nPara2)=0;声明后子类必须重写此方法,类的接口,子类中也需要含有此属性;
#include <iostream>
using namespace std;
class VirtualClass
{
public:
virtual void Demo(void) = 0;//包含纯虚函数的类为抽象类,抽象类不能构造对象
virtual void Base(void){ cout << "Base: this is base class!" << endl; }//虚函数,只包含虚函数的类可以构造对象
};
void VirtualClass::Demo(void)//纯虚函数也可以在基类中实现
{
cout << "Demo: this is base class!" << endl;
}
class SubClass : public VirtualClass
{
public:
void Demo(void)//子类实现父类定义的接口,纯虚函数,子类必须实现
{
VirtualClass::Demo();//实现后的纯虚函数调用
cout << "Demo:this is child class!" << endl ;
}
void Base(void)//子类重写父类的虚函数,如果不重写,将调用父类的Base函数
{
cout << "Base: this is child class!" << endl;
}
/*
*重写:子类覆盖父类已有的函数;
*重载:一个类中,多个同名函数参数不同,函数返回类型不能决定;
*/
int myAdd(int nValueA, int nValueB)
{
return nValueA + nValueB;
}
float myAdd(float fValueA, float fValueB)
{
return fValueA + fValueB;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
VirtualClass* m_virtual = new SubClass();//多态:基类指针可以访问子类函数
SubClass* m_child = new SubClass();
m_virtual->Demo();
m_virtual->Base();
cout << "myAdd: " << m_child->myAdd(3, 5) << endl;
cout << "myAdd: " << m_child->myAdd(1.4f, 5.5f) << endl;
system("pause");
return 0;
}