class employee{
public:
employee(){
cout << "employee construction" << endl;
}
virtual ~employee(){
cout << "employee destruction" << endl;
}
virtual fuc1()
{
cout << "base fuc1" << endl;
}
virtual void fuc3() =0 ; //含有纯虚函数,employee不能被实例化,但是可以声明指向它的指针
};
class programmer: public employee{
public:
programmer(){
cout << "programmer construction" << endl;
}
~programmer(){
cout << "programmer destruction" << endl;
}
virtual fuc1() //这里,有没有virtual关键字都一样
{
cout << "extended fuc1" << endl;
}
virtual void fuc3()
{
}
};
int main(int argc, char* argv[])
{
programmer pg1;
pg1.fuc1();
employee *pe = new programmer( );
pe->fuc1();
delete pe;
return 0;
}
///
虚函数是派生类 "可以 "修改的成员函数。
纯虚函数是派生类 "必须 "修改的成员函数。
若派生类的父类有纯虚函数,而派生类没有实现这个纯虚函数,则报语法错误。
/
虚函数的要求:
1,只有类的成员函数才能说明为虚函数,这是因为虚函数仅适用于有继承关系的类对象。
2,静态成员函数不能是虚函数,因为静态成员函数不受限于某个对象。
3,内联函数不能是虚函数,因为内联函数是不能在运行中动态确定其位置的。即使虚函数在类的内部
定义,编译时,仍将其看作非内联的。
4,构造函数不能是虚函数,因为构造时,对象还是一片未定型的空间。
5,析构函数可以是虚函数,而且通常声明为虚函数。
内联是在编译期决定的,而且直接展开为代码,而虚函数是在运行期决定的