我试图理解 C++ 中虚函数的概念,我在网上阅读了它,但我无法理解为什么下面的程序输出是 2 而不是 1?谁能解释一下?
Class A
{
int a;
public:
A()
{
a = 1;
}
virtual void show()
{
cout <<a;
}
};
Class B: public A
{
int b;
public:
B()
{
b = 2;
}
virtual void show()
{
cout <<b;
}
};
int main()
{
A *pA;
B oB;
pA = &oB;
pA->show();
return 0;
}
最佳答案
你通过覆盖虚函数和指针来实现多态性: 在您的示例中,您以多态方式使用了 pA,因此它是指向基类 (A) 的指针,但是您却为它分配了一个类 B 的对象,该对象是 A 的子对象。 并且您将 Show() 声明为虚拟的。
这是多态的主要目标;这意味着我们直到运行时才知道基指针指向的对象类型,例如在 main 中:
int main()
{
int choice;
cout << "1: A object 2: B object:\n\n";
cin >> choice;
if(1 == choice)
pA = new A; // result will be 1
else
if(2 == choice)
pA = new B; // result will be 2
if(pA)
pA->show();
delete pA;
pA = NULL;
// B* pB = new A; // error: cannot convert from class A* to class B* because C++ is not contravariant
B* pB = new B;
pB->show(); // result: 2
delete pB;
pB = NULL;
return 0;
}
关于c++ - C++虚函数的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822137/