关于C++:继承,使用指针输出


Inheritance - Output using pointer

本问题已经有最佳答案,请猛点这里访问。

我有个关于继承的问题我在网上找到了这个教程,想知道为什么"dog"的输出实际上是"animal print"我知道动物指针指向狗的地址,但为什么不印"狗印"?

请帮帮我,我是C++新手。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;

class Animal {
public:
   void print();
};
void Animal::print() {
    cout <<"Animal print" << endl;
}

class Dog : public Animal {
public:
   void print();
};

void Dog::print() {
   cout <<"Dog print" << endl;
}

int main() {

Dog h;
Animal *eptr = &h;

eptr->print();
eptr->Animal::print();

}

输出:

1
2
Animal print
Animal print


在这里,子类对象(dog)由基类对象(animal)指向。但它的局限性仅仅取决于基类行为。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
using namespace std;

class Animal {
public:
   virtual void print();
};

 void Animal::print() {
    cout <<"Animal print" << endl;
}

class Dog : public Animal {
public:
   void print();
};

void Dog::print() {
   cout <<"Dog print" << endl;
}

int main() {

Dog h;
Animal *eptr = &h;

eptr->print();
eptr->Animal::print();

}

可以使用虚函数通过基类对象访问子类。