gpt4 book ai didi

c++ - 如何正确使用虚函数

转载 作者:太空狗 更新时间:2023-10-29 20:08:18 25 4
gpt4 key购买 nike

我在一门类(class)中学习 c++——而我们只是在学习虚函数

我们有一个创建基类的任务:Car

和 3 个派生类:

  • 思域
  • 奥德赛
  • 法拉利

基类有一个 name 成员变量(带有 getter 和 setter)和一个返回默认值的 getDoorSpecs 函数

每个子类也有 getDoorSpecs,我们应该将其创建为虚函数。

我们被提供了一个 main 函数作为我们不允许修改的驱动程序,我们必须创建一个函数 attachDoors() 可以接收每个子类的实例化 - 并使用正确的 getDoorSpecs 返回一个值(value)。

我以为我终于正确地创建了虚函数——但是当我运行它时,我显然不明白如何创建 attachDoors 函数来利用子类的虚函数。我想如果我调用基类,然后调用函数,它会被子类方法覆盖——但虽然它编译得很好——但它给了我不太正确的输出。

这是我的代码:

#include <iostream>
#include <string>
using namespace std;

class Car
{
public:
string name;

Car() {
name = "Unknown model";}

string getName(){
return name;}

void setName(string iName){
name = iName;}

virtual string getDoorSpecs(){
return "Unknown doors";}
};

class Civic : public Car
{
public:
Civic(){
name = "Civic";}

virtual string getDoorSpecs() override{
return "4 doors";}
};

class Odyssey : public Car
{
public:
Odyssey(){
name = "Odyssey";}

virtual string getDoorSpecs() override{
return "2 front doors, 2 sliding doors, 1 tail gate";}
};

class Ferrari : public Car
{
public:
Ferrari(){
name = "Ferrari";}

virtual string getDoorSpecs() override{
return "2 butterfly doors";}
};

/**********************************************************************
* Function: attachDoors
* Purpose: This function can accept any type of Car object. It will
* call the appropriate functions to display the name and the doors info.
***********************************************************************/

// TODO: Include your attachDoors function here
void attachDoors(Car iVehicle)
{
cout << "Attaching doors to "
<< iVehicle.getName()
<< " - "
<< iVehicle.getDoorSpecs()
<< endl;
}

/**********************************************************************
* Function: main
* Purpose: This is the entry point and driver for the program.
***********************************************************************/
int main()
{
// You should not change main

Civic civic;
Odyssey odyssey;
Ferrari ferrari;

attachDoors(civic);
attachDoors(odyssey);
attachDoors(ferrari);

return 0;
}

这是给出的输出:

Attaching doors to Civic - Unknown doors 
Attaching doors to Odyssey - Unknown doors
Attaching doors to Ferrari - Unknown doors

这是我试图获得的输出:

Attaching doors to Civic - 4 doors
Attaching doors to Odyssey - 2 front doors, 2 sliding doors, 1 tail gate
Attaching doors to Ferrari - 2 butterfly doors

根据我们被要求执行此操作的方式,我知道可能只需对此函数稍作改动就可以获得正确的输出:

void attachDoors(Car iVehicle)
{
cout << "Attaching doors to "
<< iVehicle.getName()
<< " - "
<< iVehicle.getDoorSpecs()
<< endl;
}

但如果我能弄清楚我应该做什么,我会很震惊。(我在这里阅读了很多关于 SO 的答案 - 但没有一个人点击给我提供我正在尝试的见解)

老实说,我觉得我真的很难学习这门类(class),但是当我可以让事情正常进行时,我很享受它,而且很多时候我都能弄清楚,只是这次显然不是。非常感谢任何帮助!

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