类的概念
什么是实体?
客观世界中存在的某个事物是实体,程序中通过对实体抽出若干的特征和功能来抽象的描述实体,特征是实体的静态属性,功能是实体的动态属性。
抽象描述学生
特征:姓名、学号、性别、年龄、身高
功能:学习、跑步、听、说、读、写
特征和功能密切相关,不可割裂
对象=实体的特征(数据)+实体的功能(函数)
什么是类?
具有相同特征和功能的对象集合。
如:所有红旗轿车→红旗轿车类
对象是类的一个实例或个体或元素
int k; k称为整数变量,又称整数对象
类与结构体
结构体又称特殊的类
语法格式相似
先定义类的数据成员和函数成员
再声明具体对象(变量)
然后使用对象(变量)
类的定义
类的定义格式
class<类名>
{
private:
//私有成员,外界能够直接访问,起着接口的作用
public:
//公有成员,外界不能直接访问,使得成员被隐藏起来
protected;
//保护成员
};
一个实体的属性往往被定义为私有成员,方法被定义为公有成员
各成员的访问权限应根据实际需要确定
实体钟表如何抽象描述
特征(数据成员):
时、分、秒
型号、生产厂、价格
功能(函数成员):
设置时间、钟表运转、报时响铃、显示时间
class Clock //定义钟表类
{
private:
int Hour; //小时属性
int Minute; //分钟属性
int Second; //秒属性
float Price; //价格属性
public:
void Set(int h,int m,int s,float p); //设置时间操作
void Run(); //钟表运转操作
void Report_Time(); //报时响铃操作
void Show_Time(); //显示时间操作
};
类中的数据成员不能使用表达式进行初始化
成员函数两种定义方法
1.再类体内直接定义函数成员,该成员函数又称内联函数(格式等同于一般函数定义格式)
2.在类体外定义函数成员
格式:
<格式><类名>::<函数名>(<参数表>) //::作用域符
{
<函数体>
}
内联函数:
void Show_Time(){cout<<Hour<<’:’<<Minute<<’:’<<Second;};
类外定义成员函数:
void Clock :: Set(int h,int m,int s,float p) //设置修改4个数据成员的值的函数
{
Hour=h;
Minute=m;
Second=s;
Price=p;
}
void Clock :: Run() //模拟运行钟表运行函数
{
int i=0;
for(i=0;i<10;i++) //只模拟运行10秒
{
Second++;
if(Second==60)
{
Second=0;
Minute++;
if(Minute==60)
{
Minute=0;
Hour++;
if(Hour==24)
Hour=0;
}
}
cout<<'\r'; //不换行,返回当前行的首位
Sleep(1000); //程序暂停运行秒
Show_Time();
}
}
viod Clock :: Report_Time()
{
Show_Time();
if(Minute==0 && Second==0)
{
for(int i=0;i<Hour;i++)
{
cout<<"\007"; //响铃
Sleep(1000);
}
}
}
通过类中提供的函数对类中的数据进行操作,达到数据的安全性
对象的声明
用已定义的类去声明对象(即变量),类似于结构体
声明对象的一般形式(类的实例化)
<类名><对象1>,<对象2>,······;
对象的引用
对象的引用类似于结构体
对类中成员的访问,采用“.”运算符
一般在类体外,只有公有成员可以采用“.”运算符
私有、保护成员都不能采用“.”运算符,可以直接进行对象赋值
对钟表类测试主函数
int main()
{
Clock Big_Ben;
Big_Ben.Set(0,0,0,100);
cout<<"钟表设置时间:\n";
Big_Ben.Show_Time();
Big_Ben.Rnport_Time();
Big_Ben.Run();
Big_Ben.Set(9,59,50,900);
cout<<"\n钟表设置时间:\n";
Big_Ben.Run();
Big_Ben.Report_Time();
cout<<endl;
Big_Ben.Show_Time();
cout<<endl;
return 0;
}