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(); } |
可以使用虚函数通过基类对象访问子类。