类和对象的定义和使用

【类和对象的基本概念】

“什么是类?”对于这个问题我相信一个从事C++不久的人并不能够一下子解答出来,但其实它却是一样很好描述的东西。类其实就是类型。要了解类,我们首先就需要知道什么是对象。对象其实就是某一个具体的实体。例如一个杯子,一个苹果,这些具体的事物,我们将它们称之为一个具体的对象。在现实生活中,我们是需要对自己的物品进行整理的,如果我们不进行整理,就会显得非常的乱,而当我们需要找寻某一件东西的时候也会变得很难找。所以我们对于这些东西(也就是对象)需要有一个行之有效的管理策略,也就是分类了。而类型就是这样因运而生的。

所谓的类其实就是一个类型。通常我们会将某一个对象归结为某一类型的对象。例如一个杯子其实就是一个/杯子类型的/具体对象(请阅读时注意断句)一个苹果其实就是一个苹果类型的具体对象……按照这样的逻辑我们可以得出来一个最基本的结论。类型是抽象的,它泛指一类相同的事物,而对象是形象的,也可以说是具体的,它指代一样具体的东西。


【属性和方法】

每一类事物都会有一些固定的或者不定的特征,用于描述这些特征的信息我们称之为属性。在C++中属性通常是指存储属性的变量,也叫成员变量。例如我们可以描述某一个学生的信息有学号、姓名、年龄等,这些就是学生类型的属性。(因为每一个学生都会有这些属性)

方法是针对属性的操作,简而言之就是使用某一个类中属性的具体方法,通常我们会在类中使用函数来体现(函数的实现过程其实就是使用编程语言描述事物处理方法的过程),这一类的函数我们称之为成员函数,也叫成员方法。

在C++中,一个类就是由不定量的成员方法和属性构成。


【访问权限】

访问权限是每一个面向对象语言(OOL)都会有的一个特色,它通过某一些固定的关键字能够给类中的成员指定外部人员的访问权限。通常较多的是public(公有的)、private(私有的)以及protected(保护的)。下面我们可以将一个类想象成一个人,了解一下这些关键字的含义:

public(公有的),顾名思义就是所有的人都可以自由使用的一些资源,无论是这个类本身还是除了这个类外的其他代码都可以自由地对这个类中的公有资源进行访问和操作,不受任何限制。

private(私有的),这很明显就是只有这个类自己才可以使用的一些资源,这些资源一般都是一些数据,例如存储学号、姓名等信息的变量。它们完全不能够被外部的代码访问,除非你是这个类的友元。(关于友元的概念我们下一次再讨论)默认情况下类的成员都是私有的。

由于protected(保护的)权限在实际的开发中使用的并不是很多,因此在这里不做介绍。

备注:访问限定符在类中无先后次序,各限定符允许多次出现。


【如何构造一个类】

在C++中构造一个类,我们通常需要进行以下的步骤,下面我们可以通过一个简单的例子来说明:

class Student
{
private://使用private关键字定义数据成员(属性)
	string ID;//学号
	string Name;//姓名
	int Age;//年龄
public://使用public关键字定义方法成员(方法)
	string GetID(){ return ID; }
	string GetName(){ return Name; }
	int GetAge(){ return Age; }
	void SetID(string ID){ this->ID = ID; }
	void SetName(string Name){ this->Name = Name; }
	void SetAge(int Age){ this->Age = Age; }
};

如上就是一个基本的类。类通常以class为关键字打头,后面跟着类的名称,本例中为Student,以一对花括号说明类的本体,以分号指代类的定义结束。通常在定义类的过程中使用private关键字来说明数据成员,当使用private:开头时,则说明在private:之后的所有成员都将为私有的成员,除了Student类中的方法成员可以自由访问外,其他类外的成员将统统无法访问。同样public:打头时,说明public:之后的所有成员都是公有成员,任何区域的代码都可以对它们进行自由的访问。


【C++中对象的定义和使用】

在定义好上述的类之后,我们就可以构造一个Student类的对象了,也就是一个用于存储某一个具体学生信息的变量。定义Student对象std代码如下:

 

Student std;//定义一个Student类型的对象std


大家可以看到,对象定义的方法其实和定义变量非常的相似。那么接下来就是如何在std中保存信息了。按照我们以往的思路我们一定会写成如下的形式:

 

std.ID = "211301013";
std.Name = "蒋涵鑫";
std.Age = 22;

 

但毫无疑问的是这种赋值方式出现了错误,让我们一起来看看错误的原因:


 


造成这些错误的原因又是何在呢?其实这主要是因为我们在前面定义类的时候将ID、Name、Age三个属性定义成了private私有的类型,所以除了类中的代码之外,其他在类外的代码,例如主函数中的代码都不能够直接的访问这些成员,但是为了数据的安全,我们不得不这样做。那么我们怎样才能够做到既能够保证数据既安全又能够被访问到呢?这就是下面的这些函数的功劳:

 

public://使用public关键字定义方法成员(方法)
	string GetID(){ return ID; }
	string GetName(){ return Name; }
	int GetAge(){ return Age; }
	void SetID(string ID){ this->ID = ID; }
	void SetName(string Name){ this->Name = Name; }
	void SetAge(int Age){ this->Age = Age; }

这些函数都比较简短,我相信大家一眼就能够看出来这是什么意思。在这里要说明一下的是为了在赋值的时候防止形参的名称和类中已有的属性的名称相同而导致编译器无法识别到底要对哪个数据进行操作,因此在C++中提出了this指针的概念,this这个关键字其实就指代当前的对象。例如当我们对std中的ID进行赋值时,这个this就指代的是std。因为类是抽象的,你永远都不可能知道别人会使用这个类去命名哪些对象,所以我们利用类能够统一描述对象的特性,使用this来代替每一个具体的对象的名称。对于程序员来说这无疑是既方便又快捷的。

这些函数相当于是对象和外部交互的接口,通过这些接口我们可以自由的对每一个对象进行访问,我们可以通过get函数获取对象的属性信息,也可以通过set函数设置对象的属性信息。它们的使用方法如下:

 

std.SetID("211301013");//通过SetID函数设置学号
std.SetName("蒋涵鑫");//通过SetName函数设置姓名
std.SetAge(22);//通过SetAge函数设置年龄
cout << "学号:" << std.GetID() << endl;//通过GetID函数获取学号信息并输出
cout << "姓名:" << std.GetName() << endl;//通过GetName函数获取姓名信息并输出
cout << "年龄:" << std.GetAge() << endl;//通过GetAge函数获取年龄信息并输出

 

运行效果如下:



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值