C++基本概念----类和对象

1、相关概念

       面向对象程序设计方法的一个重要特点就是“封装性” (encapsulation),所谓“封装”,指两方面的含义: 一是将有关的数据和操作代码封装在一个对象中,形成一个基本单位,各个对象之间相对独立,互不干扰。二是将对象中某些部分对外隐蔽,即隐蔽其内部细节,只留下少量接口,以便与外界联系,接收外界的消息,这种对外界隐蔽的做法称为信息隐蔽(imformation hiding)。

程序设计者的任务包括两个方面: 一是设计所需的各种类和对象,即决定把哪些数据和操作封装在一起;二是考虑怎样向有关对象发送消息,以完成所需的任务。

对象 = 算法 + 数据结构

程序 = (对象+对象+对象+…) + 消息

类代表了某一批对象的共性和特征,类是对象的抽象,而对象是类的具体实例(instance)。类是抽象的,不占用内存,而对象是具体的,占用存储空间。

2、类的定义

如果在类的定义中既不指定private,也不指定public,则系统就默认为是私有的。归纳以上对类类型的声明,可得到其一般形式如下: 

class 类名

{ private:

私有的数据和成员函数;

 public:

公用的数据和成员函数;

};

private和public称为成员访问限定符(member access specifier)。protected声明的成员称为受保护的成员,它不能被类外访问(这点与私有成员类似),但可以被派生类的成员函数访问。

在声明类类型时,声明为private的成员和声明为public的成员的次序任意。在一个类体中,关键字private和public可以分别出现多次。每个部分的有效范围到出现另一个访问限定符或类体结束时(最后一个右花括号)为止。

用struct声明的类,如果对其成员不作private或public的声明,系统将其默认为public。而用class定义的类,如果不作private或public声明,系统将其成员默认为private。

成员函数在类外定义时,必须在函数名前面加上类名,予以限定(qualifed),“∷”是作用域限定符(field qualifier)或称作用域运算符,用它声明函数是属于哪个类的。

void Student∷display( )    

如果在作用域运算符“∷”的前面没有类名,或者函数名前面既无类名又无作用域运算符“∷”,如 

∷display( ) 或  display( )

则表示display函数不属于任何类,这个函数不是成员函数,而是全局函数,即非成员函数的一般普通函数。类函数必须先在类体中作原型声明,然后在类外定义。

在类的内部对成员函数作声明,而在类体外定义成员函数,这是程序设计的一种良好习惯。如果一个函数,其函数体只有2~3行,一般可在声明类时在类体中定义。多于3行的函数,一般在类体内声明,在类外定义。

在类体中定义的成员函数中不包括循环等控制结构,代码较短,C++系统会自动将它们作为内置(inline)函数来处理。在类外定义的成员函数则需要显式申明,满足条件下一定条件下,编译系统将其视作内置函数。

inline void Student∷display( ) 

3、存储方式

一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数无关。函数代码是存储在对象空间之外的。如果对同一个类定义了10个对象,这些对象的成员函数对应的是同一个函数代码段,而不是10个不同的函数代码段。C++用一个名为this的指针,用来指向不同的对象,来调用不对对象的相同函数段。不论成员函数在类内定义还是在类外定义,成员函数的代码段都用同一种方式存储。

4、对象成员的访问
    访问对象中的成员可以有3种方法: 

1)通过对象名和成员运算符访问对象中的成员;

访问对象中成员的一般形式为

对象名.成员名

只能访问public成员,而不能访问private成员

2)通过指向对象的指针访问对象中的成员;

Time t,*p;                //定义对象t和指针变量p

p=&t;                     //使p指向对象t

cout<<p->hour;            //输出p指向的对象中的成员hour

在p指向t的前提下,p->hour,(*p).hour和t.hour三者等价。

3)通过对象的引用变量访问对象中的成员。

Time t1;                //定义对象t1

Time &t2=t1;            //定义Time类引用变量t2,并使之初始化为t1

cout<<t2.hour;          //输出对象t1中的成员hour

在类外虽然不能直接访问私有数据成员,但可以通过调用公用成员函数来引用甚至修改私有数据成员。

通过成员函数对数据成员进行操作称为类的实现。类中被操作的数据是私有的,实现的细节对用户是隐蔽的,这种实现称为私有实现(private implementation)。这种“类的公用接口与私有实现的分离”形成了信息隐蔽。

在实际工作中,将若干个常用的功能相近的类声明集中在一起,形成类库。一种是C++编译系统提供的标准类库;一种是用户根据自己的需要做成的用户类库,提供给自己和自己授权的人使用,这称为自定义类库。类库包括两个组成部分: (1)类声明头文件; (2)已经过编译的成员函数的定义,它是目标文件。用户只需把类库装入到自己的计算机系统中(一般装到C++编译系统所在的子目录下),并在程序中用#include命令行将有关的类声明的头文件包含到程序中,就可以使用这些类和其中的成员函数,顺利地运行程序。类声明和函数定义一般是分别放在两个文本中的。类的成员函数在面向对象程序理论中被称为“方法”(method)。

发布了208 篇原创文章 · 获赞 30 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/hopegrace/article/details/104250773