类与对象是C++语言的一个特色,类是对象的抽象,对象是类的实例。
ide
类是抽象的须要占用内存,而对象时实例化的占用内存。函数
下面举个例子:spa
class Time //定义类 { int hour; //定义数据成员 int min; //定义数据成员 int sec; //定义数据成员 }; Time t;
看着这个结构是否是有点眼熟呢,跟C语言中学过的struct的应用很相似,可是二者之间仍是有区别的:在struct中若没有特别声明,结构体的成员都是public公有成员;而class默认是private私有成员。调试
类中出了数据成员以外通常还有它的成员函数,说到成员函数咱们最早想到的是构造函数,构造函数的存在就是为了让咱们初始化对象(固然也能够cout<<一些语句,方便咱们调试)。对象
说到初始化,以前在C语言中咱们见过的初始化是这样的:内存
int i = 0;
可是若是在C++里这样初始化对象,那就是万万不行的啦
ci
class Time { hour = 0; //错误的初始化 min = 0; //错误的初始化 sec = 0; //错误的初始化 };
因此必定要运用咱们刚才提到的构造函数。编译器
构造函数的函数名与类名相同,这是必须的,必须的,必须的(重要的事情说三遍),它没有返回值,也没有任何类型,它的功能是用户本身定义的,可是却不能被用户显式调用,若是用户本身没有定义构造函数,那么编译器会自动生成一个构造函数,但生成的这个构造函数并无实际的做用,它的函数体是空的。it
class Time //定义类 { public: Time() //定义构造函数,函数名与类名相同 { hour = 0; //利用构造函数来对数据成员进行初始化 min = 0; //利用构造函数来对数据成员进行初始化 sec = 0; //利用构造函数来对数据成员进行初始化 } void Set_Time(void); //函数声明 void Show_Time(void); // 函数声明 private: int hour; //定义数据成员 int min; //定义数据成员 int sec; //定义数据成员 }; void Time:: Set_Time(void) //定义成员函数的定义,设置时间 { cin >> hour; cin >> min; cin >> sec; } void Time::Show_Time(void)// 成员函数的定义,显示时间 { cout << hour << ":" << min << ":" << sec << endl; } Time t; //定义类的对象
构造函数的定义除了上述例子中的那样无参的构造函数以外,还有带有参数的构造函数,它的通常格式为:
编译
构造函数名(类型名1,形参1,类型2,形参2 ...)
上面的例子可改写为
Time(int, int, int); //有参数的构造函数 //在类外定义构造函数 Time::Time(int h, int m, int s) { hour = h; min = m; sec = s; }
C++还提供了另一种初始化数据的方法,那就是参数化表,上面例子的初始化也能够写成这样:
Time::Time(int h, int m, int s) :hour(h) , min (m) , sec (s) {}
与构造函数相对应的就是析构函数了,析构函数的做用是在撤销对象占用的内存以前完成一些清理工做,但并非删除对象。它的用法是在类名前面加一个取反符号“~”,函数中的内容可为空。
上面例子的析构函数可写为
~Time() { cout << "~Time()" << endl; }
一个类能够有多个构造函数,可是只能有一个析构函数。
调用构造函数和析构函数的顺序至关于一个栈,先构造的后析构,后构造的先析构。