提问人:KSky 提问时间:3/4/2021 最后编辑:Remy LebeauKSky 更新时间:3/4/2021 访问量:355
car 类中的复制构造函数
Copy constructor in car class
问:
指示:
使用以下类变量定义 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.hpp
Person
我主要是对以下方面感到困惑:
方法,我是否从用户那里获得了输入?我不明白说明在说什么。如何在不创建新驱动程序的情况下更新驱动程序?
setDriver()
复制构造函数。我真的不知道从哪里开始使用该方法。我尽力了复制构造函数。我也不确定我是否正确地使用了默认构造函数。
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)
}
};
答:
方法,我是否从用户那里获得了输入?我不明白说明在说什么。如何在不创建新驱动程序的情况下更新驱动程序?
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);
}
};
评论
这实际上与我最近的一项任务非常相似。我的教授希望我做的是通过 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 函数。
评论