C++语言学习记录-12:类和对象

对象

C++被称作面向对象的语言,那么一个很重要的问题就是什么是对象。

对象(object),就是指一个物品或一件事物。

同时,这个事物有自己的属性和操作特点。

一个圆可以被看作对象,那么它所含的属性就有半径、坐标、面积,可以进行的操作就有改变它的位置;把一本书看作一个对象,那么它的属性就是质量、页数、字符数、长宽高等等,可以进行的操作就是打开书或合上书。

其实,所有的编程语言都有面向对象编程的特点,只是C++的语法特点使得对对象的编程更加的容易。

类,就是将一个对象的所有属性和操作方法总结起来并封装的一个语法。

通过类的封装,使得对不同但是类型相同的对象的操作和描述更加容易,有一点函数调用的意味在里面。

还是说一本书,它有以上的性质,那么抽象成类的方式就是

class book{
    
    
	int pages;
	char* color;
	int words;
	int height;
	int weight;
}

当然,上述的只是一个例子,其编写方式并不符合类的语法。

首先,编写类时要声明类的名称,然后决定它所面向的范围,有
公共型的public,对所有的用户开放;
私人型的private,除了class本身以外都不能进行调用;
被保护型的protected,只能在class和同一package中调用访问。
若没有限定类型,默认为private型

最后,将对象需要封装的属性加入即可。

扫描二维码关注公众号,回复: 12462226 查看本文章
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语句或将函数体放入类的声明中

猜你喜欢

转载自blog.csdn.net/leanneTN/article/details/108410025
今日推荐