1。同名+同参数表+同返回值类型
2。参数表不能兼容derived
3。返回值类型可以兼容derived
4。默认参数,const修饰可以使用,但需一致书写,否则语法对语义上不鲁棒
const对虚拟函数:
(1)比如const用在Base,而Derived无const修饰时,这使Base的const对象才能使用此成员函数,而Derived的任何对象均可使用此virtual成员函数
(2)const使得使用静态类型,取消滞后联编
class B
{
public:
virtual void ok() const{cout << "B::okokok" << endl;}
};
class D:public B
{
public:
void ok() {cout << "D::okokok" << endl;}
};
int main()
{
// const B b;
// b.ok();
B *pb = new D;
pb -> ok(); //B::okokok
D *pd = new D;
pd -> ok(); //D::okokok
delete pb;
return 0;
}
默认参数对虚拟函数
(1)未破坏滞后联编
(2)默认参数是在编译的时候带入的
class B
{
public:
virtual void ok(int = 3) {cout << "B::okokok" << endl;}
};
class D:public B
{
public:
void ok(int i) {cout << "D::okokok" << endl; cout << i << endl;}
};
int main()
{
// const B b;
// b.ok();
B *pb = new D;
pb -> ok(); //D::okokok
D *pd = new D;
pd -> ok(3); //D::okokok
delete pb;
return 0;
}
2。参数表不能兼容derived
3。返回值类型可以兼容derived
4。默认参数,const修饰可以使用,但需一致书写,否则语法对语义上不鲁棒
const对虚拟函数:
(1)比如const用在Base,而Derived无const修饰时,这使Base的const对象才能使用此成员函数,而Derived的任何对象均可使用此virtual成员函数
(2)const使得使用静态类型,取消滞后联编
class B
{
public:
virtual void ok() const{cout << "B::okokok" << endl;}
};
class D:public B
{
public:
void ok() {cout << "D::okokok" << endl;}
};
int main()
{
// const B b;
// b.ok();
B *pb = new D;
pb -> ok(); //B::okokok
D *pd = new D;
pd -> ok(); //D::okokok
delete pb;
return 0;
}
默认参数对虚拟函数
(1)未破坏滞后联编
(2)默认参数是在编译的时候带入的
class B
{
public:
virtual void ok(int = 3) {cout << "B::okokok" << endl;}
};
class D:public B
{
public:
void ok(int i) {cout << "D::okokok" << endl; cout << i << endl;}
};
int main()
{
// const B b;
// b.ok();
B *pb = new D;
pb -> ok(); //D::okokok
D *pd = new D;
pd -> ok(3); //D::okokok
delete pb;
return 0;
}