gpt4 book ai didi

C++ 从基类实例调用派生函数

转载 作者:可可西里 更新时间:2023-11-01 17:37:20 27 4
gpt4 key购买 nike

我是 C++ 的新手,但我遇到了一个我似乎无法解决的问题。我会用汽车来说明问题,只是为了让事情变得更简单。好吧,假设我有一个基本类汽车,并且我有从该类继承的不同品牌。像这样:

class Car
{
public:
Car();
};

class Ford: public Car
{
public:
Ford();
void drive();
void park();
};

整个想法是将所有这些不同的汽车放在一个 Car 类型的 vector 中。像这样:

vector<Car*> cars;
cars.push_back(new Ford());
cars.back()->drive(); //this won't work

如何在基类实例上调用派生函数?请注意,我想将这些全部放在一个 vector 中。这背后的原因是因为我只想使用已添加的最后一个派生汽车类实例。(在这种情况下,派生汽车类是福特)。另请注意,所有汽车类别都将具有相同的功能。

最佳答案

如果这些函数真的对所有派生类都是通用的,那么你就有了一个通用接口(interface),所以你应该通过基类来表达它。为此,您将这些函数声明为纯虚拟函数:

class Car {
public:
virtual void drive() = 0; // Pure-virtual function
};

class Ford : public Car {
public:
virtual void drive() { std::cout << "driving Ford\n"; }
};

...

vector<Car*> cars;
cars.push_back(new Ford());
cars.back()->drive(); //this will work

[附带说明一下,使用原始指针 vector 通常被认为是不好的做法,因为它会使内存管理变得棘手。您应该考虑使用智能指针。]

关于C++ 从基类实例调用派生函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9974868/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com