gpt4 book ai didi

C++重载和选择正确的功能

转载 作者:太空宇宙 更新时间:2023-11-04 12:03:36 25 4
gpt4 key购买 nike

C++方法重载问题

我有1个父类调用Vehicle

我有 2 个子类叫 Motorcycle 和 Car

我有这个值调用 getNoOfWheels();

父类得到了那个方法,摩托车和汽车也得到了。

假设我提示用户输入

string vehicleType;
cout << "What is your vehicle type" << endl;
cin >> vehicleType;

根据用户输入,我如何让程序根据 vehicleType 选择正确的函数,我知道我可以使用 if VehicleType== ,但这会破坏重载的目的。

较早时得到了关于使用虚拟方法的建议。在这种情况下

virtual int noOfVerticles() const { return 0; }

对于shape.h

我对汽车和摩托车有相同的功能,但是我如何让 noOfVerticles 根据 vehicleType 从子类中选择正确的功能

我试过这样的..

Vehicle cVehicle;
Car &rCar = &cVehicle;


if(inVehicle=="Car")
{
cout << rCar.noOfWheels() << endl;
}

我得到一个错误,说..

invalid initizliation of non-const refenrece of type "Car&" from an rvaleu of type Vehicle*

和...

这是我在 Car.cpp 中的虚函数

public:
virtual int noOfWheels() const { return 4; }

谢谢!

最佳答案

当你做的时候

Car &rCar = &cVehicle;

然后您将 rCar 声明为一个引用,但您为它分配了一个指针。符号 (&) 根据使用位置的不同而有不同的作用。

&cVehicle 中使用时,它是 运算符的地址,并返回指向 cVehicle 的指针。当在变量声明中使用时,它会告诉编译器该变量是一个引用。


至于你的问题,看来你做的有点不对。使用虚方法时,您不必检查对象的类型,编译器会为您处理。

假设你有这个声明:

Vehicle *pVehicle = new Car;

现在变量 pVehicle 是一个指向基类的指针,但是因为它被分配了一个指向子类的指针,虚函数无论如何都会起作用:

std::cout << "Number of wheels = " << pVehicle->noOfWheels() << '\n';

上面会打印轮子的数量是 4,因为编译器会自动调用正确的函数。如果稍后将 pVehicle 更改为指向 Motorcycle 实例,并再次执行上述打印输出,它会正确显示 2。

关于C++重载和选择正确的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13083220/

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