C++中的类与对象

来源:互联网 发布:2345软件怎么样 编辑:程序博客网 时间:2024/06/07 05:21
类是把函数和一些成员数据放在一起,类似于结构体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)的概念,因为类是一个抽象的概念的对应体,所以计算机不给它分配内存,只给对象分配内存


0 0
原创粉丝点击