gpt4 book ai didi

c++ - 如何在以下 C++ 代码中对同一对象调用默认构造函数和复制构造函数?

转载 作者:行者123 更新时间:2023-11-30 01:06:19 25 4
gpt4 key购买 nike

我正在尝试做什么?

我试图在对象的默认构造函数中获取用户输入,如果前一个对象和当前对象具有相同的品牌名称,则在复制构造函数中比较它。

问题是什么?

我无法调用同一对象的默认构造函数和复制构造函数。

我的代码:

#include <iostream>
#include <bits/stdc++.h>

using namespace std;

class Scooty {

int cc ;
string model, brand;
bool goodBrands();

public:

Scooty () : cc(0), model(""), brand("") {

cout << "\n Enter the following scooty details: \n\n";

cout << "\n \t Brand: ";
cin >> brand;
transform(brand.begin(), brand.end(), brand.begin(), :: tolower);

cout << "\n \t Model: ";
cin >> model;
transform(model.begin(), model.end(), model.begin(), :: tolower);

cout << "\n \t CC: ";
cin >> cc;
}

Scooty (Scooty &s) { if (brand == s.brand) cout << "You will get a discount!\n"; }

void computeDataAndPrint ();
};

bool Scooty :: goodBrands() {

if (brand == "honda" || brand == "tvs" || brand == "yamaha")
return true;
return false;
}

void Scooty :: computeDataAndPrint () {

if (cc > 109 && goodBrands())
cout << "\n Good Choice!\n";
else
cout << "\n Its okay!\n";
}

int main() {

Scooty s;
Scooty s1, s1(s) // This gives error

s.computeDataAndPrint();

return 0;
}

最佳答案

你的复制构造函数没有调用你的默认构造函数。

C++11 引入了委派构造函数的概念。一个构造函数可以在它自己的初始化列表中调用同一个类的另一个构造函数。例如:

Scooty (const Scooty &s)
: Scooty() // <-- add this
{
if (brand == s.brand)
cout << "You will get a discount!\n";
}

这允许构造函数利用由同一类的另一个构造函数执行的初始化。

在早期版本的 C++ 中,初始化列表只能调用直接基类和数据成员的构造函数,因此公共(public)初始化必须在构造函数主体可以根据需要调用的单独函数/方法中执行。例如:

class Scooty {
int cc;
string model;
string brand;

void init() {
cout << "\n Enter the following scooty details:- \n\n";
cout << "\n \t Brand:";
cin >> brand;
transform(brand.begin(), brand.end(), brand.begin(), ::tolower);
cout << "\n \t Model:";
cin >> model;
transform(model.begin(), model.end(), model.begin(), ::tolower);
cout << "\n \t CC:";
cin >> cc;
}

...

public:
Scooty () : cc(0) {
init(); // <-- here
}

Scooty (const Scooty &s) : cc(0) {
init(); // <-- here
if (brand == s.brand)
cout << "You will get a discount!\n";
}

...
};

int main() {
Scooty s;
Scooty s1(s);
...
return 0;
}

关于c++ - 如何在以下 C++ 代码中对同一对象调用默认构造函数和复制构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46460826/

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