car 类中的复制构造函数

Copy constructor in car class

提问人:KSky 提问时间:3/4/2021 最后编辑:Remy LebeauKSky 更新时间:3/4/2021 访问量:355

问:

指示:

使用以下类变量定义 Person 类:字符串 firstName、lastName 和 address。默认构造函数应将它们全部设置为空字符串。它应该有每个变量的 setter 和 getter。

创建一个 Car 类,该类具有私有变量 string make、string color、int year。它还应该具有指向 Person 的指针的驱动程序。它应该有一个默认构造函数,用于创建默认人员并将其他变量设置为 Black, 1910, Ford。

您应该为所有变量设置 setter 和 getter,包括采用 firstName、lastName 和 Address 并将驱动程序更新为这些值的 setDriver 方法(请注意,这不会创建新的驱动程序,它只是更新现有驱动程序)。

最后,创建一个重载 = 运算符(赋值)、复制构造函数和<<运算符(插入)。插入运算符应返回“year color make driven by firstname space lastname of address”。分配和插入都应作为好友实现。

首先使用您自己的主程序测试它们,使用它们后,se 提供的驱动程序以显示您的类正常工作。

我在下面发布了我的文件。我已经完成了我的课程,我不需要那部分的帮助。car.hppPerson

我主要是对以下方面感到困惑:

  1. 方法,我是否从用户那里获得了输入?我不明白说明在说什么。如何在不创建新驱动程序的情况下更新驱动程序?setDriver()

  2. 复制构造函数。我真的不知道从哪里开始使用该方法。我尽力了复制构造函数。我也不确定我是否正确地使用了默认构造函数。setDriver()

在任何人生气之前,不,你不需要“为我做功课”,我只是简单地征求你关于这些主题的建议和知识,因为我自己对这些主题的知识非常非常少。

这是我的文件,大部分代码都在其中,这是我目前所拥有的:car.hpp

class Car
{
    Person * driver;
    std::string make;
    std::string color;
    int year;

public:
    Car(std::string black, std::string Ford) : make(Ford), color(black), year(1910){driver = new Person;}
    Car(const Car &other) : make(other.make), color(other.color), year(other.year){this->driver = new std::string();}
    ~Car();

    void setMake(std::string make2){this->make = make2;}
    void setColor(std::string color2){this->color = color2;}
    void setYear(int year2){this->year = year2;}
    void setDriver(){};

    const std::string getMake(){return make;}
    const std::string getColor(){return color;}
    const int getYear(){return year;}

    Car & operator=(Car const & other)
    {
        *(driver) = *(other.driver);
    }

    bool operator>(Car const & other)
    {
        return *(driver) > *(other.driver)
    }
};
C++ 运算符重载 复制构造函数 朋友

评论

0赞 JohnFilleau 3/4/2021
与您的教学人员交谈。这里有误解,有太多的误解,无法解开。你需要回顾你以前的作业,问问自己是否理解这些。与您的教学人员交谈。

答:

0赞 Remy Lebeau 3/4/2021 #1

方法,我是否从用户那里获得了输入?我不明白说明在说什么。如何在不创建新驱动程序的情况下更新驱动程序?setDriver()

答案就在说明中:

您应该为所有变量设置 setter 和 getter,包括采用 firstName、lastName 和 Address 并将驱动程序更新为这些值的 setDriver 方法(请注意,这不会创建新的驱动程序,它只是更新现有驱动程序)。

复制构造函数。我真的不知道从哪里开始

尝试更像这样的东西:

class Car
{
    Person *driver;
    std::string make;
    std::string color;
    int year;

public:
    Car(std::string black, std::string Ford) : driver(new Person), make(Ford), color(black), year(1910) {}
    Car(const Car &other) : driver(new Person(*(other.driver))), make(other.make), color(other.color), year(other.year) {}
    ~Car(){ delete driver; }

    void setMake(std::string make2){ make = make2; }
    void setColor(std::string color2){ color = color2; }
    void setYear(int year2){ year = year2; }

    void setDriver(std::string firstName2, std::string lastName2, std::string address2){
        driver->setFirstName(firstName2);
        driver->setLastName(lastName2);
        driver->setAddress(address2);
    }

    std::string getMake() const { return make; }
    std::string getColor() const { return color; }
    int getYear() const { return year; }

    Car& operator=(const Car &other)
    {
        *driver = *(other.driver);
        make = other.make;
        color = other.color;
        year = other.year;
        return *this;
    }

    bool operator>(const Car &other) const
    {
        return *driver > *(other.driver);
    }
};

评论

0赞 KSky 3/5/2021
谢谢!setDriver 现在很有意义,我认为当我背靠背分配程序时,我的大脑有时会停止工作,哈哈
0赞 Maurice Ingenrieth 3/4/2021 #2

这实际上与我最近的一项任务非常相似。我的教授希望我做的是通过 setDriver() 函数的参数来使用参数,因此在 setDriver() 函数中添加参数是有意义的。目前尚不清楚您的老师希望如何输入数据,但要仅更新驱动程序的数据,您必须在要更新的数组中找到驱动程序的索引。您可以通过搜索来查找特定的驱动程序,并在数组中进行线性搜索。

int Car::FindName(char* aName) const  
{
        for (int i = 0; i < currentSize; i++)   // Look at each entry.
            if (strcmp(list[i].GetName(), aName) == 0)
            return i;       // If found, return position and exit.
    
            return -1;              // Return -1 if never found.
 }

如果找到了驱动程序,您可以通过以下方式更新该位置:(YourPointer)[index].set();

我假设你的驱动程序类中有一个 set 函数。