相关疑难解决方法(0)

709
推荐指数
11
解决办法
17万
查看次数

学习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
查看次数

为何使用虚拟功能?

可能重复:
有人可以解释C++虚拟方法吗?

我有一个关于C++虚函数的问题.

我们为什么以及何时使用虚拟功能?任何人都可以给我一个实时实现或使用虚拟功能?

c++ virtual-functions

43
推荐指数
3
解决办法
10万
查看次数

从基类转换为派生的未定义行为吗?

我遇到了一个问题,即派生到派生类会解决问题.我在SO上找到了一个答案,说它可以导致UB,测试它,它编译和正常工作.是不确定的行为?如果这是解决这个问题的正确方法?

class A
{
public:
    A(){};
    ~A(){}
};

class B : public A
{
public:
    B(){};
    ~B(){}
    void Show() { std::cout << "Show" << std::endl; }
};

int _tmain(int argc, _TCHAR* argv[])
{
    A a;
    B* b = static_cast<B*>(&a);
    b->Show();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ class derived-class

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