C++ 重载运算符 、析构函数、重载

    重载运算符:本质上是一个函数,函数名 operator+运算符(>,<,+,-,=,==,>=,<=等)
    有些运算符,我们没有对该运算符进行重载,系统会自动生成该运算符的重载,比如赋值运算符 =
 

    Time mytime5(10, 20, 30);//这个调用默认构造函数(无参数)
    Time mytime6;//这个调用默认构造函数(无参数)
    mytime6 = mytime5;//这个调用拷贝赋值运算符,如果没有自己定义,编译器自动生成,编译器自动生成的赋值运算符重载
    //比较粗糙,就是将非static成员变量赋值给运算符左侧的对象的对应成员。如果成员里有类对象,还会调用这个类的拷贝赋值运算符
    //为了精确控制赋值动作,我们往往自己来写重载赋值运算符
    //重载赋值运算符:有返回类型和参数列表,参数就是运算符的运算对象,比如mytime5
    cout << mytime5.Hour << endl;
//函数体:
Time& Time::operator=(const Time& tempobj)//tempobj就是mytime5
{
	// TODO: 在此处插入 return 语句
	cout << "调用了Time& Time::operator=(const Time&)赋值运算符重载函数" << endl;
	Hour = tempobj.Hour;
	min = tempobj.min;
	secend = tempobj.secend;
	haomiao = tempobj.haomiao;
	return *this;//*this指向mytime6
}

//函数声明:放在头文件中
//重载赋值运算符,要定义成public才能进行赋值,定义成private则不能进行赋值
	Time& operator= (const Time& tempobj);

析构函数:相对于构造函数,对象在销毁时会自动调用析构函数

函数名字:~ 接 类名,没有返回值,也没有参数。不能被重载,所以一个类只有一个析构函数

函数重载:系统允许函数名相同,但是函数的参数个数或者类型不同,在调用时,传递不同的参数,会调用对应的函数。

//.h 函数声明:
public:
    	~Time();//析构函数(释放函数)


//.cpp 函数体:

Time::Time()
{
	p = new char[100];
	cout << "调用了默认构造函数" << endl;
}


Time::~Time()
{
	delete[] p; //自己new的对象需要自己释放,系统不会释放new内存,导致内存泄漏
	cout << "调用了析构函数" << endl;

}

new对象、delete对象:

‘’析构函数只需要销毁自己new的对象

    //new对象的时候,系统会调用Time的构造函数
    Time* mytime1 = new Time;//系统调用无参构造函数
    Time* mytime2 = new Time();//系统调用无参构造函数

    //切记!!!自己new的对象,一定要自己delete!系统自动不会释放new的内存

    delete mytime1;
    delete mytime2;//使用delete时,系统会调用Time的析构函数

C++ 重载运算符 、析构函数、重载_第1张图片

 

你可能感兴趣的:(C++,c++)