类与对象的基本概念
CLASS类将数据以及数据上的操作封装在一起
OBJECT对象是有具体类类型的变量
打个比方,类就像一个制作月饼的摸具,那么我们可以通过这个摸具来放入面粉和馅料编程一个月饼,那么摸具就是类,而各种各样的月饼便是对象
类的定义
类是对一群具有相同属性和相同行为的对象的描述
我们来构造一个圆形的类:
构造类最重要的就是数据和操作,所以我们圆的类需要数据:半径,操作:计算周长函数和计算面积的函数;
在代码中,类的格式如下:
class 类名称
{
privete:只允许类中访问
public:公有成员,外部可访问
protected:保护性成员,与继承相关
}
//eg:时钟类,有设置时间和时间展示两个操作
class clock
{
privete:
int hour,minute,second;
public:
void setTime(int newH,int newM,int newS);
void showTime();
}
成员函数
上述的时钟类的函数,我们称之为成员函数,我们刚刚只进行了声明,但是还没有具体定义函数里的内容是什么;
下面的代码将会补充上,并且在主函数里创建对象以及使用对象的成员函数
//eg2-2:时钟类,有设置时间和时间展示两个操作
class clock
{
privete:
int hour,minute,second;
public:
void setTime(int newH,int newM,int newS);
void showTime();
}
void clock::setTime(int newH,int newM,int newS){
hour = newH;
minute = newM;
second = newS;
}
void clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl
}
int main(){
clock myClock; //定义对象
myClock.setTime(20,39,20);
myClock.showTime();
return 0;
}
构造函数
构造函数是一个特殊的成员函数,主要用在对象的初始化!
//eg2-3:时钟类,重点注意与构造函数
class clock
{
privete:
int hour,minute,second;
public:
clock(int newH,int newM,int newS);//声明构造函数
void setTime(int newH,int newM,int newS);
void showTime();
}
//构造函数推荐写法
clock::clock(int newH,int newM,int newS){
hour = newH;
minute = newM;
second = newS;
}
//c++成员列表实现方法,更加简洁
//clock::clock(int newH,int newM,int newS):hour(newH),minute(newM),second(newS);{}
void clock::setTime(int newH,int newM,int newS){
hour = newH;
minute = newM;
second = newS;
}
void clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl
}
int main(){
clock c(0,0,0); //定义对象
c.showTime();
return 0;
}
析构函数
析构函数与构造函数的恰好相反,它对对象撤销的时候起到了清理的作用
例如在建立对象的时候调用了new开辟了一片内存空间,析构函数就是调用delete释放内存
//eg2-4
#include <iostream>
using namespace std;
class Democlass{
public:
Democlass(int i);
~Democlass();
}
Democlass::Democlass(int i){
cout<<"Initial value is"<<i<<endl;
}
Democlass::~Democlass(){
cout<<"destructor"<<endl;
}
void main(){
Democlass obj(30);
cout<<"This is the end main()"<<endl;
return;
}
运行结果:
Initial value is 30
This is the end main()
destructor
构造函数重载
eg2-2:没有定义构造函数,为啥程序能够运行?
见构造函数特点第五点,会自动生成无参构造函数;
eg2-3: 这个例子用clock c;语句创建clock对象是否成功?
不能,如果有构造函数,不会自动生成无参构造函数,需要我们自己定义;
通过函数重载来实现;
//eg2-3:时钟类,重点注意与构造函数
class clock
{
privete:
int hour,minute,second;
public:
clock(int newH,int newM,int newS);//声明构造函数
void setTime(int newH,int newM,int newS);
void showTime();
}
//无参构造函数
clock::clock(int newH,int newM,int newS):hour(1),minute(1),second(1);{}
//构造函数
clock::clock(int newH,int newM,int newS){
hour = newH;
minute = newM;
second = newS;
}
void clock::setTime(int newH,int newM,int newS){
hour = newH;
minute = newM;
second = newS;
}
void clock::showTime(){
cout<<hour<<":"<<minute<<":"<<second<<endl
}
int main(){
clock myclock1;
myclock1.showTime();
clock myclock2(8,3,30); //定义对象
c.showTime();
return 0;
}