您的位置:首页 > 其它

派生类中重新定义虚函数及虚函数的注意事项

2016-03-28 22:10 435 查看
在派生类中重新定义虚函数时,不需加关键字virtual但是必须要和父类中的同名,同返回类型,同参数列表

例外

父类可以返回父类指针

派生类可以返回派生类指针

class base
{
public:
base* show()
{
cout<<"this is base show()!"<<endl;
return this;
}
};

class D : public base
{
public:
D* show()
{
cout<<"this is D show()!"<<endl;
return this;
}
};

void main()
{
D d;
base *p = &d;
p->show();    //调用base中的show方法
}


1.只有类的成员函数才能做虚函数

2.静态成员函数是所有同类对象所共有的,不能作为虚函数

3.全局函数不能做虚函数

4.内联函数不能做虚函数

5.构造函数不能定义为虚函数(因为在调用构造函数的时候对象还没有完全初始化)

6.析构函数可以定义为虚函数(在父类及其派生类中都动态分配内存空间时,必须把父类的析构函数定义为虚函数,实现撤销对象时的多态性)

class base
{
public:
base()   //父类构造函数
{
cout<<"create base!"<<endl;
}
~base()  //父类析构函数
{
cout<<"free base!"<<endl;
}
};

class D : public base
{
public:
D()
{
cout<<"create D!"<<endl;
}
~D()
{
cout<<"free D!"<<endl;
}
};

void main()
{
base *p = new D;    //分配动态内存
delete p;           //释放内存
}


执行结果:

未将父类的析构函数设成虚函数时:

create base!

create D!

free base!

将父类的析构函数设成虚函数时:

create base!

create D!

free D!

free base!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: