对象
C++被称作面向对象的语言,那么一个很重要的问题就是什么是对象。
对象(object),就是指一个物品或一件事物。
同时,这个事物有自己的属性和操作特点。
一个圆可以被看作对象,那么它所含的属性就有半径、坐标、面积,可以进行的操作就有改变它的位置;把一本书看作一个对象,那么它的属性就是质量、页数、字符数、长宽高等等,可以进行的操作就是打开书或合上书。
其实,所有的编程语言都有面向对象编程的特点,只是C++的语法特点使得对对象的编程更加的容易。
类
类,就是将一个对象的所有属性和操作方法总结起来并封装的一个语法。
通过类的封装,使得对不同但是类型相同的对象的操作和描述更加容易,有一点函数调用的意味在里面。
还是说一本书,它有以上的性质,那么抽象成类的方式就是
class book{
int pages;
char* color;
int words;
int height;
int weight;
}
当然,上述的只是一个例子,其编写方式并不符合类的语法。
首先,编写类时要声明类的名称,然后决定它所面向的范围,有
公共型的public,对所有的用户开放;
私人型的private,除了class本身以外都不能进行调用;
被保护型的protected,只能在class和同一package中调用访问。
若没有限定类型,默认为private型
最后,将对象需要封装的属性加入即可。
class TV {
//定义类的名称
public: //声明为public型
int channel;
int volumelevel;
bool on; //对各项属性进行定义
TV() //初始化TV的状态
{
channel = 1;
volumelevel = 1;
on = false;
}
void turnon() //编写操作
{
on = true;
}
void turnoff()
{
on = false;
}
void setvolume(int newvolumelevel)
{
if (on && newvolumelevel >= 1 && newvolumelevel <= 7)
volumelevel = newvolumelevel;
}
void setchannel(int newchannel)
{
if (on && newchannel >= 1 && newchannel <= 120)
channel = newchannel;
}
void channelup()
{
if (on && channel < 120)
channel++;
}
void channeldown()
{
if (on && channel > 1)
channel--;
}
void volumeup()
{
if (on && volumelevel < 7)
volumelevel++;
}
void volumedown()
{
if (volumelevel > 1)
volumelevel--;
}
};
以上代码来自《C++程序设计(第三版)》(梁勇著)并做了一点标注
书中的原代码还用了几个函数重载,也有对基本判断语句和逻辑运算符的运用,是一个比较好的代码示例。
类的特性
类具有封装性、多态性和继承性。
不同类型的类所开放的访问程度体现了类的封装性,继承性和多态性暂时不提。
从内存占用来看,类是现实世界在计算机中的反映,它将数据和对这些数据的操作封装在一起,并没有额外开空间。
而对象则是类中的实例,是实际挤占空间的部分。
对象的定义
在定义对象时遵循以下的语法:
类名 对象名
语法类似于函数的定义,比如上面程序的下半部分:
int main()
{
TV tv1;
tv1.turnon();
tv1.setchannel(30);
tv1.setvolume(3);
TV tv2;
tv2.turnon();
tv2.channelup();
tv2.channelup();
tv2.volumeup();
cout<<"tv1's channel is "<<tv1.channel<<" and volumelevel is "<<tv1.volumelevel<<endl;
cout<<"tv.2's channel is "<<tv2.channel<<" and volumelevel is "<<tv2.volumelevel<<endl;
return 0;
}
其中有一个tv1.turnon(),这一类就是定义对象名的方法。
类的成员函数
操作方法:
1.在类中声明函数体原型
2.在类外给出函数体实现,并在函数名前使用类名作为限定
3.可以直接在类中给出函数体,形成内联成员函数
4.允许声明重载函数和带默认值的函数
内联成员函数
1.为提高运行时的效率,一般较为简单的函数可以声明为内联形式
2.函数体中不要有诸如while循环或判断语句等复杂形势
3.在类中声明内联函数的方法:使用inline语句或将函数体放入类的声明中