C++学习笔记(二):类和对象

来源:互联网 发布:网络贷款平台排名 编辑:程序博客网 时间:2024/06/04 01:36

类是对象共性的抽象,一种自定义的数据类型,可认为是C语言中结构体的拓展。它的作用是将数据和算法(数据操作)封装在用户自定义的抽象数据类型中。

为什么要在C++中添加类这样一种“工具“呢? 程序中的每一组数据都是为某一种操作而准备的。而数据的交叉使用容易导致数据被误操作,影响程序的正常运行。因此大牛们想到了把相应的数据和操作封装在一起,构成对象。

类包含数据和算法,并且他们都可以有两种属性:public和private。(注意类的声明是一个语句,所以不要忘记在最后的花括号后加分号。)

一般来说为了保证数据信息的隐蔽,数据都定义为private,不可被除成员函数之外的程序调用。而定义为public的成员函数作为类提供的功能的实现,成为了对外的接口,外部程序通过对此类成员函数的调用来实现对数据的操作。而定义为private的成员函数只可以被内部成员函数调用,称为”工具函数“(utility function).要注意如果在声明类时未指定成员的属性,则系统默认为是private,那么这样的类是没有任何意义的,因为它没有对外接口,不能对外提供任何功能。之前的编程习惯是先声明private属性,但现在习惯先声明public属性,这样用户就可以集中关注类所提供的功能。

成员函数可以在类内声明,类外定义,这是一种良好的习惯,可以减少类体代码的长度便于阅读,而且把类的接口和类的实现分离,从而使类更像一个黑盒,信息更隐蔽。可以这样:先建立一个头文件:student.h

//student.hclass student{  //声明一个类public:          void set (void);          void display(void);         private:          int ID;          char name[20];          char sex;          int age;};
再建立一个.cpp文件来实现成员函数:student.cpp

//student.cpp#include "student.h"//包含类的声明#include <iostream>//用到了标准库中的cout和cin函数using namespace std;void student::set(){cout << "please input the information" << endl;cin >> ID >> name >> sex >> age;}void student::display(){cout << name << ID << sex << age<< endl;}
由类定义的对象的成员函数的实现都是一样的,只有数据成员是不一样的。若为每个对象都分配独立的数据和函数空间则是对有限内存的一种浪费。因此编译器只给每个对象分配独立的数据空间,而同一类定义的对象共享同一函数空间。通过this指针来分别是在调用哪个对象。要知道#include “   ”是一个预编译命令,它用头文件代码来覆盖(替代)这个命令。因此头文件是不可以单独编译的,只有是在包含了头文件的.cpp文件编译时才会检查它的语法错误。这样就很清楚为什么要在student.cpp中用#include “student.h”这个命令了。另外由于成员函数是在类体外定义的,故要加上作用域 student ::  这样才能表明这时定义的set函数是student类的成员函数而不是普通的函数。不在头文件中实现成员函数有它的好处:一个头文件可能会包含很多类,而所有要包含该头文件的源代码都会讲头文件的内容copy过去,这样相同的成员函数就不用多次编译,而只是在相应的成员函数实现的原文件(student.cpp)中编译一次就行了,提高了编译的速度。最后通过链接器,就可形成.exe文件了。





原创粉丝点击