多态、虚方法、C++
polymorphism, virtual methods, C++
class A;
{
private:
int a;
public:
virtual int getV() { return a; }
} a;
class C : public A;
{
private:
int c;
public:
int getV() { return c; }
} c;
class D
{
public:
A* liste;
} d;
liste 的内存可能已分配,A::a 和 C::c 正在保存值。现在,如果我将 c 放入 D::liste[0] 并用
给出
cout << d.liste[0].getV();
它打印 A::a。为什么它不打印出 C::c 尽管我声明 A::getV() 为虚拟?
C++ 多态性仅适用于指针和引用。 liste[0]
的类型为 A
,而不是 A*
或 A&
,因此实际上不会调度 liste[0].getV()
调用。它只是调用 A::getV()
.
我是这样写程序的,得到了预期的正确结果
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
virtual int getV() { cout<<"A";return a; }
};
class C : public A
{
private:
int c;
public:
virtual int getV() { cout<<"C";return c; }
};
class D
{
public:
A* liste[2];
};
int main()
{
D d;
d.liste[0]=new C();
d.liste[1]=new A();
cout<<d.liste[0]->getV();
return 0;
}
随便看看..
class A;
{
private:
int a;
public:
virtual int getV() { return a; }
} a;
class C : public A;
{
private:
int c;
public:
int getV() { return c; }
} c;
class D
{
public:
A* liste;
} d;
liste 的内存可能已分配,A::a 和 C::c 正在保存值。现在,如果我将 c 放入 D::liste[0] 并用
给出cout << d.liste[0].getV();
它打印 A::a。为什么它不打印出 C::c 尽管我声明 A::getV() 为虚拟?
C++ 多态性仅适用于指针和引用。 liste[0]
的类型为 A
,而不是 A*
或 A&
,因此实际上不会调度 liste[0].getV()
调用。它只是调用 A::getV()
.
我是这样写程序的,得到了预期的正确结果
#include <iostream>
using namespace std;
class A
{
private:
int a;
public:
virtual int getV() { cout<<"A";return a; }
};
class C : public A
{
private:
int c;
public:
virtual int getV() { cout<<"C";return c; }
};
class D
{
public:
A* liste[2];
};
int main()
{
D d;
d.liste[0]=new C();
d.liste[1]=new A();
cout<<d.liste[0]->getV();
return 0;
}
随便看看..