Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;类定义重复_C++ - Fatal编程技术网

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++中的思维”。不过这两本书看起来都不错。