没有名字的c 2022-01-01 20:39 采纳率: 88.2%
浏览 40
已结题

结果为啥是11212?能解释一下嘛😵

class Base{
protected:
int a;
public:
Base(int x=1){a=x;}
virtual void print() { cout<<a; }
};
class Derived:public Base{
int b;
public:
Derived(int x) { b=x; }
void print() { cout<<a<<b; }
};
void f1(Base t) { t.print(); }
void f2(Base &t) { t.print(); }
void f3(Base *t) { t->print(); }
int main(void)
{
Derived b(2);
f1(b);
f2(b);
f3(&b);
system("pause");
return 0;
}

  • 写回答

2条回答 默认 最新

  • MayPP___ 2022-01-01 21:35
    关注

    首先Base类是Derived类的基类,在实例化Derived类的对象b时传入了一个参数2,那么会调用子类的构造函数,也就是这个实参会传给子类而不是父类,父类会调用自身构造函数,并使用默认值1。构造后a=1,b=2;
    之后对于f1,传入父类对象b=子类对象,那么则使用父类print函数打印a即为1
    不懂再问,望采纳!
    对于f2,传入的是父类引用b=子类对象,那么根据多态现象,子类重写了父类的虚函数,那么就调用子类的print函数打印a,b即1,2
    对于f3,传入的是父类指针指向子类,*b=子类b,也会进行多态,调用子类print函数打印a,b即1,2
    综上所述,则打印11212
    不懂再问,望采纳!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 1月10日
  • 已采纳回答 1月2日
  • 创建了问题 1月1日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题
  • ¥50 如何将脑的图像投影到颅骨上