结构体
1.结构体的创建就像是为下面定义对象规划一个蓝图(在定义结构体时,结构成员其实还不存在),告诉声明对象的内部结构如何,包含了一些什么样的成员。
2.结构体中还可以包含结构体对象:如下两个结构体在中,在结构体CarType声明了一个类型为EngineType结构的engine数据成员,需要注意的是此时的engine还不是一个对象一直要等到声明了一个CarType对象,否则engine只是定义的一部分。
struct EngineType{
int num;
float liters;
string Made;
};
struct CarType{
string maker;
int years;
float price;
string wheel[4];
EngineType engine;
};
3.结构体有一个重要的属性:**可以将同一结构中的一个对象赋值给另一个对象。**而数组就不拥有此属性,需要逐一赋值。
4.我们可以将数组和结构对象看作为一简单的数据结构
类
1.类的特性——封装:类和结构体很相似,或者可以说结构体其实就是类的一个基础版本,类在结构的基础上衍生函数成员,就是说类不仅有数据成员,还有函数成员,而这些成员(无论是数据成员还是函数成员)都只有由该类生成的对象可以访问类的数据成员和函数成员。类这一对象内部的数据只能由对象本身访问的特性就叫封装。
这是因为数据位于容器内部(也就是对象内部),与程序的其他部分时分开的,这也就是说修改类里面的代码不会影响程序的其他部分。
可以看到类被分成了几个部分,其中函数部分为共用部分(public)就是任何对象都可以访问。而对象的私有成分就包括数据成员(只能由对象本身访问)
公用部分充当了程序和对象数据之间的接口(在计算机领域共用部分就叫类接口)
为什么要设计这个类接口呢?
由于客户需求的变化,程序会需要不断的修改,在修改类对象数据时,有类接口的存在就不会有大量的修改,只是需要修改类数据成员就行,根本就不需要修改主程序,大大的缩小工作量。只是需要多调用函数,而调用函数的时间可以忽略不计。
1.每个类应该使用两个文件:一个是类说明文件,一个是类实现文件
//类说明文件里的内容(类的定义)
//checkbook.h-A class for a checkbook
class Checkbook{
peivate:
float balance;
float lastcheck;
float lastDeposit;
public:
void setBalance(float amount);
float getBalance();
};
类说明文件的名称就是文件里类的名称,后面加上一个.h扩展名。
类实现文件:名称就是类名加上一个.cpp扩展名
//checkbook.cpp-the functions for the Checkbook class
#include"checkbook.h"
//头文件必须包含checkbook.h文件
//双引号说明包含的文件位于和.cpp文件同一个目录或文件夹里
void Checkbook::setBalance(float amount){
balance=amount;
}
float Checkbook::getBalance(){
return balance;
}
2.在编写好一个类后,应该编写一个驱动测试程序(test driver)来检测类里面的函数是否可以达到预期的功能,对于小程序来说可能没有这个必要但是对于真正的开发程序时是很有必要的,因为现实里程序是非常的长的。
3.可以将类函数的定义放在类定义里面,但是也只是对于一些函数体小的类函数实用,因为要是类函数的函数体庞大(或者是含有for语句)反倒会增加类的复杂度。其实将类函数的定义放在类实现文件里会方便代码的维护。
结构和类的区别
结构也可以完成类具有的很多功能(也可以定义函数),类也可以不标明public和private,
总的来说结构和类只有两个区别:
1.结构和类分别以关键字struct和class打头。
2.不明确指定公有部分还是私有部分时,结构默认全为公有,类默认全为私有(当然此时毫无用处)