用构造函数为对象的数据成员实现输入和输出时间

        在C++程序中,对象的初始化是一个不可缺少的重要问题。不应该让程序员在这个问题上花过多的精力,C++在类的设计中提供了较好的处理方法。
        为了解决这个问题,C++提供了构造函数(constructor)来处理对象的初始化。构造函数是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行。构造函数是在声明类的时候由类的设计者定义的,程序用户只须在定义对象的同时指定数据成员的初值即可。
        构造函数的名字必须与类名同名,而不能任意命名,以便编译系统能识别它并把它作为构造函数处理。它不具有任何类型,不返回任何值。

编写程序:

运行结果:

程序分析:
        在类中定义了构造函数Time,它和所在的类同名。在建立对象时会自动执行构造函数,根据构造函数Time的定义,其作用是对该对象中的全部数据成员赋予初值0。请不要误认为是在声明类时直接对程序数据成员赋初值(那是不允许的),赋值语句是写在构造函数的函数体中的,只有在调用构造函数时才执行这些赋值语句,对当前对象中的数据成员赋值。
        程序运行时首先建立对象t1,在执行构造函数过程中对t1中的数据成员赋予初值0。然后再执行主函数中的t1.set_time函数,从键盘输入新值赋给对象t1的数据成员,再输出t1的数据成员的值。接着建立对象t2,同时对t2中的数据成员赋予初值0,但对t2的数据成员不再赋予新值,直接输出数据成员的初值。
        上面是在类内定义构造函数的,也可以只在类内对构造函数进行声明而在类外定义构造函数。将程序中的第5~9行改为下面一行:
        Time();                 //对构造函数进行声明
在类外定义构造函数:

        Time::Time()        //在类外定义构造成员函数,要加上类名Time和域限定符"::"
                {hour=0;
                 minute=0;
                 sec=0;

                 }
说明:有关构造函数的使用,有以下几点要注意:
        (1)什么时候调用构造函数呢?在建立类对象时会自动调用构造函数。在建立对象时系统为该对象分配存储单元,此时执行构造函数,就把指定的初值送到有关数据成员的存储单元中。每建立一个对象,就调用一次构造函数。在上面的程序中,在主函数中定义了一个对象t1,在此时,就会自动调用t1对象中的构造函数Time,使各数据成员的值为0。
        (2)构造函数没有返回值,因此也没有类型,它的作用只是对对象进行初始化。因此也不需要在定义构造函数时声明类型,这是它和一般函数的一个重要的不同之点。不能写成
        int Time()
                {...}

        void Time()
                {...}
        (3)构造函数不需用户调用,也不能被用户调用。下面用法是错误的:
        t1.Time();        //试图用调用一般成员函数的方法来调用构造函数
        构造函数是在定义对象时由系统自动执行的,而且只能执行一次。构造函数一般声
明为public。
        (4)可以用一个类对象初始化另一个类对象,如
        Time t1;             //建立对象t1,同时调用构造函数t1.Time()
        Time t2=t1;        //建立对象t2,并用一个t1初始化t2
此时,把对象t1的各数据成员的值复制到t2相应各成员,而不调用构造函数t2.Time()。
        (5)在构造函数的函数体中不仅可以对数据成员赋初值,而且可以包含其他语句,例如cout语句。但是一般不提倡在构造函数中加入与初始化无关的内容,以保持程序的清晰。
        (6)如果用户自己没有定义构造函数,则C++系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。
        (7)以上介绍的构造函数是最基本的形式。构造函数有不同的形式,以便用于不同情况的数据初始化。

  • 27
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在一个类中,可以使用构造函数来从文件中读取数据,并将数据存储到类的成员变量中。同时,也可以使用析构函数将数据写回到文件中。 下面是一个简单的示例: ```c++ #include <iostream> #include <fstream> using namespace std; class Book { public: string title; double price; // 构造函数,从文件中读取数据 Book(string filename) { ifstream ifs(filename); ifs >> title >> price; ifs.close(); } // 析构函数,将数据写入文件 ~Book() { ofstream ofs("book.txt"); ofs << title << " " << price << endl; ofs.close(); } }; int main() { // 创建一个Book对象,从文件中读取数据 Book book("book.txt"); // 输出读取到的数据 cout << "Title: " << book.title << endl; cout << "Price: " << book.price << endl; // 修改数据 book.title = "New Title"; book.price = 9.99; // 当对象离开作用域时,析构函数会将数据写入文件 return 0; } ``` 在上面的例子中,Book类中有一个构造函数,它接受一个文件名作为参数,并从文件中读取书籍的标题和价格,并将它们存储到类的成员变量中。同时,Book类中还有一个析构函数,它在对象销毁时将数据写回到文件中。 在主函数中,我们创建了一个Book对象,并调用了它的构造函数。然后,我们输出了从文件中读取到的数据。接着,我们修改了数据,并在程序结束时自动调用析构函数,将数据写回到文件中。 这只是一个简单的例子,实际上,您可以根据需要进行更复杂的操作,例如使用构造函数从文件中读取多个数据项,并将它们存储到一个数组或向量中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值