相关疑难解决方法(0)

学习C++:多态和切片

请考虑以下示例:

#include <iostream>
using namespace std;

class Animal
{
public:
    virtual void makeSound() {cout << "rawr" << endl;}
};

class Dog : public Animal
{
public:
    virtual void makeSound() {cout << "bark" << endl;}
};

int main()
{
    Animal animal;
    animal.makeSound();

    Dog dog;
    dog.makeSound();

    Animal badDog = Dog();
    badDog.makeSound();

    Animal* goodDog = new Dog();
    goodDog->makeSound();
}
Run Code Online (Sandbox Code Playgroud)

输出是:

rawr
bark
rawr
bark
Run Code Online (Sandbox Code Playgroud)

但我认为产量肯定应该是"粗树皮树皮".badDog有什么用?


更新:您可能对我的另一个问题感兴趣.

c++ polymorphism

54
推荐指数
2
解决办法
7083
查看次数

使用子类对象初始化的多态基类对象的数组

对不起复杂的标题.我有这样的事情:

class Base
{
public:
  int SomeMember;
  Base() : SomeMember(42) {}
  virtual int Get() { return SomeMember; }
};

class ChildA : public Base
{
public:
  virtual int Get() { return SomeMember*2; }
};

class ChildB : public Base
{
public:
  virtual int Get() { return SomeMember/2; }
};

class ChildC : public Base
{
public:
  virtual int Get() { return SomeMember+2; }
};

Base ar[] = { ChildA(), ChildB(), ChildC() };

for (int i=0; i<sizeof(ar)/sizeof(Base); i++)
{
  Base* ptr …
Run Code Online (Sandbox Code Playgroud)

c++ polymorphism virtual visual-studio-2005 initialization

6
推荐指数
1
解决办法
6608
查看次数