我是一个有抱负的软件工程师和全职的CS学生。在假期休息期间,我一直在做练习,以便更好地掌握我的手艺(C++)。有些话题我只是需要澄清一下。我在研究目标心率计算器。
我花了几个小时,几天时间,试图理解构造函数和默认构造函数的概念。我知道每个创建的对象都需要构造函数。
在继续之前,我想测试我的代码,它会提示用户输入他们的名字,然后返回它。一次又一次,对于那些包括我在内的学习缓慢的学生,谁能用莱曼的话来解释一下这个问题吗?
下面是我的密码。我收到一个错误:
调用“
::HeartRates()”的无匹配函数
main.cpp
int main() {
HeartRates patient;
cout << "First name: ";
string firstName;
cin >> firstName;
patient.setFirstName(firstName);
patient.getFirstName();
return 0;HeartRate.h
// create a class called HeartRates
class HeartRates {
public:
// constructor receiving data
HeartRates(string personFirstName, string personLastName, int month, int day, int year) {
firstName = personFirstName;
lastName = personLastName;
birthMonth = month;
birthDay = day;
birthYear = year;
}
void setFirstName(string personFirstName) {
firstName = personFirstName;
}
string getFirstName() {
return firstName;
}
private:
// attributes
string firstName, lastName;
int birthMonth, birthDay, birthYear;
};谢谢大家!谢什!我的书增加了所有不必要的额外单词,使阅读变得困难。它所要说的就是:
如果要创建一个对象以接收用户的信息,请确保构造函数为空()。如果要手动输入数据,则通过构造函数的参数传递该数据。
我希望这是你解释的幌子。我爱这个社区-太感谢你了!你们都不知道我的背景--基本上从15年的营销/广告生涯过渡到了软件工程师。你们都非常欢迎,这证实了我做出了一个很好的改变。✊。
以下是我更新的代码:
main.cpp
int main() {
HeartRates patient;
cout << "First name: ";
string firstName;
cin >> firstName;
patient.setFirstName(firstName);
cout << patient.getFirstName();
return 0;
}HeartRates.h
// create a class called HeartRates
class HeartRates {
public:
// constructor receiving data - THANKS STACKOVERFLOW COMMUNITY
HeartRates() {
firstName;
lastName;
birthMonth;
birthDay;
birthYear;
}
void setFirstName(string personFirstName) {
firstName = personFirstName;
}
string getFirstName() {
return firstName;
}
private:
// attributes
string firstName, lastName;
int birthMonth, birthDay, birthYear;
};发布于 2022-01-09 17:58:21
如果不定义任何构造函数,则会得到不带参数的构造函数。
一旦你定义了一个有参数的构造函数,你的非args构造函数就会退出北极。
所以现在你必须写HeartRate("first", "last", 1, 1, 2001)
如果不想这样写,请从构造函数中删除参数列表,只需为初始值设置所需的任何内容。
发布于 2022-01-09 18:02:04
默认构造函数是可以在没有参数的情况下调用的任何构造函数。
MyClass() - defaultMyClass(int x) -非defaultMyClass(int x = 42) -默认如果不为类定义任何构造函数,编译器将自动生成默认构造函数。它看起来或多或少像MyClass() {}。
HeartRates patient;试图调用默认构造函数,因为您没有提供任何参数(即HeartRates patient(...);)。
发布于 2022-01-09 18:09:51
默认构造函数和“正常”构造函数之间的区别可能比它看起来的要简单。只要您没有在类中指定构造函数,在创建类的对象时,它总是会调用默认构造函数,如果您没有实现默认构造函数,它只会创建一个没有初始化的特定类的对象。如果您现在已经用一些参数实现了自己的构造函数,那么构造该类对象的唯一方法将要求您调用已实现的构造函数。然后覆盖默认构造函数。
你可以想象它是一个你只定义的函数。就像这样:
(在本例中,函数foo作为构造函数)
总有一个
void foo();
函数
每当您调用foo()时,它都会调用这个特定的函数,什么也不做。并给出了foo()函数。如果您现在声明第二个foo函数,如下所示:
void foo(std::string name)
{
std::cout << "This is the name " << name << std::endl;
}然后调用foo函数,然后调用您实现的新foo函数。
长话短说,如果您只创建了一个没有自定义构造函数的类,则始终有一个在创建对象时调用的默认构造函数,而不是真正初始化某个对象。每当您编写自己的自定义构造函数时,它都会覆盖默认构造函数。
https://stackoverflow.com/questions/70644005
复制相似问题