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

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

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

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

class A

{
public:
void show(){cout< private:
const int i=10;
};
class B
{
public:
virtual void set(int i=4){ j=i;cout<<"B:j "< private:
int j;
};
class C: public B,private A    //多重继承
{
public:
virtual void set(int x=7)
{
n=x;
cout<<"C:set-> "< }
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


你可能感兴趣的:(C++)