相关疑难解决方法(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++ inheritance

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

标签 统计

c++ ×3

inheritance ×2

c++-faq ×1

object-slicing ×1

polymorphism ×1