构造函数
1:定义:完成对象初始化的函数就是构造函数
2:类的对象的初始化是由类的成员函数类进行的
3:在建立对象的时候就直接去调用构造函数了
4:类对象的定义涉及到类名和对象名
5:由于类具有唯一性,而对象具有多样性,所以使用类名来作为构造函数名字
6:默认构造函数,如果没有定义构造函数,编译器会提供默认构造函数
构造函数功能:
构造函数是负责对象的初始化工作,将数据成员初始化
创建对象的时候,其类的构造函数确保:在用户操作对象之前,系统保证初始化的进行
构造函数给对象分配空间和初始化
构造函数的语法规则:
构造函数名字与类名一样
构造函数没有返回类型
方法的实现主要是为对象来赋初值
放在外部进行定义的构造函数需要在函数名前面加”::”
构造函数是在定义对象的时候自动定义的
构造函数可以进行隐式的类型转换(ecplict禁止构造函数进行隐式转换)
析构函数
1:一个类可能在构造函数里面分配资源,这些资源要在对象不复存在以前被释放掉
2: 析构函数也是一种特殊的成员,它没有返回类型,没有参数,不能随意的调用,也没有重载.只是在类对象生命期结束的时候,会由系统自动的调用
3:析构函数名,就是在构造函数前面加一个逻辑非运算符号”~”,表示”逆构造函数”
4:如果类没有提供析构函数,那么编译器会为类提供一个默认的析构函数
5:析构函数不能重载,只有一个
#include<iostream>
using namespace std;
class Clock{
public:
Clock(int newH, int newM, int newS);
Clock();
~Clock();
void setTime(int newH, int newM, int newS);
void showTime();
private:
int hour, minute, second;
};
Clock::Clock():hour(0),minute(0),second(0){
}
Clock::~Clock()
{
cout<<"the process is at end"<<endl;
}
void Clock::setTime(int newH, int newM, int newS){
hour=newH;
minute=newM;
second=newS;
}
void Clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl;
}
Clock::Clock(int newH, int newM, int newS):hour(newH),minute(newM),second(newS){
}
int main(){
Clock c;
c.showTime();
Clock c1;
c1.setTime(8, 30, 30);
c1.showTime();
return 0;
}
总结:
构造函数与析构函数是控制了一个类的定义和结束的过程
构造函数是控制了类的对象的初始化,资源申请的过程
析构函数是控制了类对象的结束过程,资源释放的过程