1.将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以用多个变量描述事物的属性);
2.将这类事物所能进行的行为也归纳出来,形成一个个函数,这些函数可以用来操作数据结构(这一步叫做“抽象”)。
然后,通过某种语法形式,将数据结构和操作该数据结构的函数“捆绑”在一起,形成一个“类”,从而使得数据结构和操作该数据结构的算法呈现出显而易见的紧密关系,这就是“封装”。
面向对象的程序设计具有“抽象”,“封装”,“继承”,“多态”四个基本特点。
举个例子写个程序,输入矩形的长和宽,输出面积和周长
矩形的属性就是长和宽,因此需要两个变量,分别代表长和宽。
对一个矩形 可以进行的操作有
设置长和宽,算面积,和算周长这三种行为(当然也可以有其他行为)。
这三种行为,可以各用一个函数来实现,他们都需要用到长和宽两个变量。
将长,宽变量和设置长,宽,求面积,以及求周长的三个函数“封装”在一起,就能形成一个“矩形类”。
长,宽变量成为该“矩形类”的“成员变量”,三个函数成为该类的“成员函数”。成员变量和成员函数统称为类的成员。
实际上,“类”看上去像“带函数的结构”。
接下来我们来看以下,类的代码
#includeusing namespace std; class crectangle { public: int w,h; int Area() { return w*h; } int Perimeter() { return 2*(w+h); } void Init(int w_,int h_) { w=w_; h=h_; } };//一定记得要有分号 int main() { int w,h; crectangle r; //r是一个对象 cin>>w>>h; r.Init(w,h); cout<
通过类,可以定义变量。类定义出来的变量,也称为类的实例,就是我们说的“对象”。
c++中,类的名字就是用户定义的类型的名字,可以像用基本类型那样来使用它。crectangle就是一种用户自定义的类型。
和结构体变量一样,对象所占用的内存空间的大小,等于所有成员变量的大小之和,成员函数不占用类的大小。(这句话不是完全正确的,计算机有一种字节对齐的机制,所以有时候用sizeof得出的字节大小和自己手算的所有成员变量的大小不一样)。
对于上面的crectangle类,sizeof(rectangle)=8。
每个对象各有自己的存储空间,一个对象的某个成员变量被改变了,不会影响到另一个对象。
对象之间的运算和结构变量一样,对象之间可以用“=”进行赋值,但是不能用“==”,“!=”,“>”,“<”,“>=”,“<=”进行比较,除非这些运算符经过了“重载”。
使用类的成员变量和成员函数用法1. 对象名.成员名
crectangle r1,r2;
r1.w=5;
r2.Init(5,4);
Init函数作用在r2上,即Init函数执行期间访问的w和h是属于r2这个对象的,执行r2.Init不会影响到r1。
用法2. 指针->成员名
crectangle r1,r2;
crectangle * p1=&r1;
crectangle * p2=&r2;
p1->w=5;
p2->Init(5,4); //Init作用在p2所指向的对象上
用法3. 引用名.成员名
crectangle r2;
crectangle &rr=r2; //rr就引用了r2
rr.w=5;
rr.Init(5,4); //rr的值变了,r2的值也变了
#includeusing namespace std; class crectangle { public: int w,h; int Area() { return w*h; } int Perimeter() { return 2*(w+h); } void Init(int w_,int h_) { w=w_; h=h_; } };//一定记得要有分号 void PrintRectangle(crectangle & r) { cout<



