C++ C++;类定义重复
这个类,特别是粗体的行让我很困惑。为什么我们要两次提到时间?如果我删除了第一行粗体字,会发生什么 时间C++ C++;类定义重复,c++,C++,这个类,特别是粗体的行让我很困惑。为什么我们要两次提到时间?如果我删除了第一行粗体字,会发生什么 时间 class Time { public: Time(); // this is "the first bold line" Time(int h, int m, int s); // this is another "lines in bold" void set(int h, int m, int s); void print(); int allSe
class Time {
public:
Time(); // this is "the first bold line"
Time(int h, int m, int s); // this is another "lines in bold"
void set(int h, int m, int s);
void print();
int allSeconds();
void difference(Time t);
int getHour();
int getMinute();
int getSecond();
void setHour(int h);
void setMinute(int m);
void setSecond(int s);
private:
int hour, minute, second;
};
如果删除“粗体行”,则类
Time
将没有无参数构造函数。编译器不会生成一个,因为定义了非无参数构造函数。实际效果将取决于整个实现的任何部分是否使用无参数构造函数
"粗线"不是重复,;事实上,声明了两个具有不同符号的不同构造函数。Time()
是默认构造函数的声明。当类似于timet遇到代码>
因为额外的构造函数时间(inth,intm,ints)如果已提供代码>,编译器将不会自动生成默认构造函数
通过编写Time()=default,可以告诉编译器采用编译器生成的默认构造函数代码>。或者,为3参数构造函数提供默认参数:然后它可以代替默认参数
<> C++标准库(特别是容器)的某些部分要求对象是默认可构造的。因此,如果您错过了它,那么您可能会得到一些编译错误,这取决于您的类的使用方式。它们不是类定义,而是构造函数。您将看到,如果使用以下代码删除第一个(即),将会发生什么情况
int main() {
Time time1; // 1st (default) constructor called
Time time2(12, 0, 0); // 2nd constructor called
return 0;
}
,阅读它,特别是关于函数重载的部分。这是两个不同的构造函数…我知道这是一个相当愚蠢的问题,但教科书还没有到书店+幻灯片没有真正解释这一点。谢谢你的回答。R:“用java思考”——如果你正在学习C++,这是个可怕的想法。java程序员C++ C++ C++程序,我要继续学习C++,开始java(可怕的想法,那是你的大学)ATM,但是这是一个C++问题,上面的意思是“C++中的思维”。不过这两本书看起来都不错。