gpt4 book ai didi

c++ - 虚函数输出?

转载 作者:太空宇宙 更新时间:2023-11-04 15:08:02 26 4
gpt4 key购买 nike

我只是在做一些事情并编写了这个程序。我得到以下输出。我知道函数解析发生在运行时,而变量绑定(bind)发生在编译时,但我无法理解的是我得到的第一个输出 (this->n)。谁能给我解释一下?

    # include <iostream>
# include <stdio.h>
# include <conio.h>

using namespace std;

class A
{
int n;
public:
virtual void Fun1(int no=10)
{
int n=no;
cout<<"A::Fun1() "<<n <<"\n";
}
};

class B :public A
{
int n;
public:
virtual void Fun1(int no=20)
{
int n=no;
cout<<"B::Fun1() " << this->n << "\n"; // WHY SO ? gives B::Fun1() 40
cout<<"B::Fun1() " << n << "\n";
}
};

int main()
{
B b;
A &a =b;
a.Fun1();
A a1=b;
a1.Fun1();
getch();
return 0;
}

我得到的输出是

    B::Fun1() 40
B::Fun1() 10
A::Fun1() 10

最佳答案

对于第一个输出,this->n 指的是成员变量 B::n,您从未对其进行初始化 - 这可以打印任何内容。

对于第二个,n 指的是局部变量 n,您使用函数参数对其进行初始化。由于默认参数由调用者提供,并且您通过对 A 的引用调用该函数,因此您获得了 A::Fun1 中指定的默认值,而不是B::Fun1 中的一个。如果您要调用 b.Fun1(),那么它将打印 B::Fun1() 20

对于第三个,您已经“切片”了 B 对象,给出了一个 A 类型的对象,因此调用了 A::Fun1.

关于c++ - 虚函数输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9315361/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com