关于C++的问题请高手帮我加一下注释,谢谢

来源:百度知道 编辑:UC知道 时间:2024/07/08 00:50:10
请写出下面程序的输出结果
#include <stdio.h>

class Base
{
public:
Base() { member = 0; }
Base(int value) { member = -1; }
virtual void Display() const { printf("Member is : %d\n", member + 1); }
protected:
int member;
};

class Derived : public Base
{
public:
Derived(int value) : Base(value) { member += 10; }
virtual void Display() const { printf("Member is : %d\n", member + 2); }
};

void OutputMember(Base const& obj)
{
obj.Display();
}

void main(int argc, char *argv[])
{
Derived obj(20);
OutputMember(obj);
}
答案为11.请在讲一下计算细节。谢谢。

#include <stdio.h>

class Base //声明基类
{
public:
Base() { member = 0; } //第一种初始化方法,使值为0
Base(int value) { member = -1; }//第二种初始化方法,使值为-1
virtual void Display() const { printf("Member is : %d\n", member + 1); }//输出数值的虚函数
protected:
int member; //保护方式下的成员可以被继承类使用
};

class Derived : public Base //继承基类
{
public:
Derived(int value) : Base(value) { member += 10; } //继承类的初始化方法,调用基类的第二种初始化方法来初始化,并且把数值+10
virtual void Display() const { printf("Member is : %d\n", member + 2); }
}; //重写虚函数,输出+2后的值

void OutputMember(Base const& obj)//输出值,注意形参强制转换成base基类了,所以调用的是基类的输出函数
{
obj.Display();
}

void main(int argc, char *argv[])
{
Derived obj(20); //用继承类声明对象,虽然给了参数20,但是使用了基类的初始化方法,使值为-1,然后再用继承类初始化加上了10,使数值为9
OutputMe