2

说我有一个基类

class Base
{

public:
void A() {do stuff};
void B() {A(); do stuff};
};

和一个派生类

class Derived : public Base
{
public:
void A() {do things}
};

Derived derived1;
derived1.B();

B会调用基类的A还是派生类的A?

我怀疑 B 会调用基类的 A,为了让它使用新的重新定义的 A,我必须使它成为虚拟的:

class Base
{

public:
virtual void A() {do stuff};
void B() {A(); do stuff};
};

那是对的吗?这就是虚函数的用途吗?

4

2 回答 2

1

是的,在这两个方面都正确...

于 2013-04-16T00:06:48.653 回答
0

尝试这个

class Base
{
public:
virtual void A() {do stuff};
void B() { do stuff};
};

class Derived : public Base
{
public:
void A() {do things}
void B() {do things}
};

Derived d;
Base *p = &d;
p->A();
p->B();

函数 B 不会被覆盖

于 2013-04-16T00:11:06.180 回答