还是那句话,我们继续在简单的代码中,体会学习C++,本节主要是体会学习类的进阶知识.

一.构造函数与析构函数

    当创建一个对象时,往往需要做一些初始化工作,例如对数据成员赋值等。为了解决这个问题,C++提供了构造函数。
    构造函数(Constructor)是一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户调用(用户也不能调用),而是在创建对象时自动执行。构造函数的作用是在创建对象时进行初始化工作,最常见的就是对成员变量赋值。

    创建对象时系统会自动调用构造函数进行初始化工作,同样,销毁对象时系统也会自动调用一个函数来进行清理工作(例如回收创建对象时消耗的各种资源),这个函数被称为析构函数。
    析构函数(Destructor)也是一种特殊的成员函数,没有返回值,不需要用户调用,而是在销毁对象时自动执行。与构造函数不同的是,析构函数的名字是在类名前面加一个”~“符号。

#include <iostream>
using namespace std;

class Student
{
    public:
        //构造函数,用参数初始化列表初始化
        Student(string name1, int age1, float score1):name(name1), age(age1), score(score1){}
        //析构函数
        ~Student();
        //普通成员函数
        void say();
    private:
        string name;
        int age;
        float score;
};
Student::~Student()
{
    cout<<name<<"再见"<<endl;
}
void Student::say()
{
    cout<<name<<"的年龄是 "<<age<<",成绩是 "<<score<<endl;
}

int main()
{
    Student stu1("小明", 15, 90.5f);
    stu1.say();

    Student stu2("李磊", 16, 95);
    stu2.say();

    Student stu3("王爽", 16, 80.5f);
    stu3.say();

    cout<<"main 函数即将运行结束"<<endl;

    return 0;
}

 二 .C ++对象的常引用

        我们知道,一个变量的引用就是变量的别名。实质上,变量名和引用名都指向同一段内存单元。
        如果形参为变量的引用名,实参为变量名,则在调用函数进行虚实结合时,并不是为形参另外开辟一个存储空间(常称为建立实参的一个拷贝), 而是把实参变量的地址传给形参(引用名),这样引用名也指向实参变量。

#include <iostream>
using namespace std;
class Time
{
   public:
   Time(int h,int m,int s):hour(h),minute(m),sec(s){}
   int hour;
   int minute;
   int sec;
};
//对象的常引用
void fun( const Time &t)
{
   std::cout<<t.hour<<t.minute<<t.sec;
}

int main( )
{
   Time t1(10,13,56);
   //直接传递对象
   fun(t1);
   return 0;
}