您的位置:首页 > 编程语言 > C语言/C++

C++中的类与对象

2016-06-07 18:14 239 查看
类是把函数和一些成员数据放在一起,类似于结构体struct。
声明格式是 class+类名 {
数据成员 +成员函数 } 。 class 是必须的关键词。 对象就是把 “类” 实例化 ,也类似于结构体变量的声明,它的创建格式是 类名+对象名,比如有一个已经定义的类 A ,可以这样把A实例化 A a ; a就是你创建的对象。只有创建了对象,类才能发挥作用。

在C++中,类是一种数据类型。

    客观事物是复杂的,要描述它必须从多方面进行,也就是用不同的数据类型来描述不同的方面。如商场中的商品可以这样描述:

    商品名称(用字符串描述),该商品数量(用整型数描述),该商品单价(用浮点数描述),该商品总价(用浮点数描述)。

这里用了属于三种不同数据类型的四个数据成员(data member)来描述一种商品。

在C++中可以这样表述:

class  CGoods{

 public :

           char  Name[21] ;
//对于中文可用wchar_t  name[11]
 int  Amount ;
 float  Price ;
 float  Total_value ;

} ; //最后的分号不可少,这是一条说明语句

关键字class是数据类型说明符,指出下面说明的是类。标识符

CGoods是商品这个类的类型名。花括号中是构成类体的一系列的成员,关键字public是一种访问限定符。

访问限定符(access specifier)有三种:public(公共的),

private(私有的)和protected(保护的)。第一种说

明的成员能从外部进行访问,两种说明的成员不能从外部进行访

问。每种说明符可在类体中使用多次。它们的作用域是从该说明

符出现开始到下一个说明符之前或类体结束之前结束。

       如果在类体起始点无访问说明符,系统默认定义为私有(private)。

   访问说明符private(私有的)和protected(保护的)体现了类具有封装性(Encapsulation)

定义一个类的一般格式为:

class 类名{

《《private:》

                成员表1;》

    《public:

                成员表2;》

    《protected:

                成员表3;》

}; //最后的分号不可少;注意:所有说明都有分号

其中“class 类名”称为类头(class head)。花括号中的部分称为类体(class body),类体中定义了类成员表(class member list)。

类定义的更关键部分是对数据成员的操作,用函数来完成:

class CGoods{

private :

  char    Name[21] ;

  int     Amount ;

  float   Price ;

  float   Total_value ;

public :

  void   RegisterGoods(char[],int,float); //输入数据

  void   CountTotal(void) ; //计算商品总价值

  void   GetName(char[]) ; //读取商品名

  int   GetAmount(void) ; //读取商品数量

  float   GetPrice(void) ; //读取商品单价

  float   GetTotal_value(void) ; }; //读取商品总价值 

这样在类中引进了成员函数(member function)或函数成员,也

就是函数也成了数据

(类)中的一员。类把数据(事物的属性)和函数(事物的行为——操作)封装为一个整体。 

        四个数据成员被说明成私有的,而六个函数成员被说明成公

有的;这就是说如果从外部对四个数据成员进行操作的话,只能通

过六个公有函数来完成,数据受到了良好的保护,不易受副作用的影

响。公有函数集定义了类的接口(interface)。

       类是一种数据类型,定义时系统不为类分配存储空间,所以

不能对类的数据成员初始化。类

中的任何数据成员也不能使用关

键字extern、auto或register限定其存储类型。

    成员函数可以直接使用类定义中的任一成员,可以处理数据成员,也可调用函数成员

前面只对成员函数作了一个声明(函数的原型),并没有对函数进行定义。

       函数定义通常在类的说明之后进行,其格式如下:

返回值类型 类名::函数名(参数表)

  {……}//函数体

其中运算符“::”称为作用域解析运算符(scope resolution operator),它指出该函数是属于哪一个类的成员函数。

类CGoods的函数定义

对象是类的实例(instance)。声明一种数据类型只是告诉编译系统该数据类型的构造,并没有预定内存。类只是一个样板,以此样板可以在内存中开辟出同样结构的实例——对象。

  创建类的对象可以有两种常用方法。

       第一种是直接定义类的实例——对象:

CGoods Car;  int I;

这个定义创建了CGoods类的一个对象Car,同时为它分配了属于它自己的存储块,用来存放数据和对这些数据实施操作的成员函数(代码)。对象只在定义它的域中有效。

  第二种是采用动态创建类的对象的方法,将在第七章中学习。所谓动态指在程序运行时建立对象。而前一种是在编译时(程序运行前)建立。

如果通过使用关键字inline,则系统也会自动采用内联扩展方法实现,这时每个对象都有该函数一份独立的拷贝。如RegisterGoods()函数可定义为:

inline void CGoods::RegisterGoods(char name[] , int amount , float price){
strcpy(Name,name) ; Amount=amount ;
Price=price ; 

}

则每个对象都有RegisterGoods()函数一份独立的拷贝。

Inline只是一个建议,最后由编译器决定是否执行。对象的存储方式是物理的,这是由计算机来完成的,它并不影响类在逻辑上的封装性。

  对象使用的规则很简单,只要在对象名后加点号(点操作符,成员访问运算符(member access oprator)之一),再加成员数据或成员函数名就可以了。但是这些成员必须是公有的成员,只有公有成员才能在对象的外面对它进行访问。

现实世界中的实体可以抽象出类别的概念。对应于计算机世界就有一个类(class)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++