virtual 函数的public继承的 的一点问题及理解

来源:互联网 发布:淘宝上旺旺点不开 编辑:程序博客网 时间:2024/06/10 13:27

当使用派生类对象生成基类指针,使用基类指针调用 virtual  方法时,假设 virtual 方法的参数是有默认初始值的。

通过本实例发现,基类指针指向了派生类(derived class),按照常规来说应该是调用派生类的set(int x) 方法,但是在缺省参数时,情况确实很诡异,

首先基类指针调用派生类的方法是,如果缺省参数,则使用基类的默认初始化值,而不管派生类有没有默认初始化,然后再调用派生类的方法。

class A

{
public:
void show(){cout<<i<<endl;}
private:
const int i=10;
};
class B
{
public:
virtual void set(int i=4){ j=i;cout<<"B:j "<<j<<endl;}
private:
int j;
};
class C: public B,private A    //多重继承
{
public:
virtual void set(int x=7)
{
n=x;
cout<<"C:set-> "<<n<<endl;
}
void show1(){A::show();}
private:
int n;
};
int main()
{
C c;B* b=new C;
c.show1();
c.set(2);
b->set();
b->set(8);

delete b;

}

运行结果如下:

10
C:set-> 2
C:set-> 4
C:set-> 8


0 0
原创粉丝点击