面向对象:
对象 = 数据(数据类型)+ 算法
从客观事物抽象出类:例如生活中的洗衣机、冰箱。
洗衣机的属性:
1)外观上:长、宽、高、类型(滚筒、波轮)、品牌(小天鹅、海尔)
2)功能上:洗衣服
伪代码理解:
//C语言的描述
struct 洗衣机
{
int nwidth;
int nheight;
int nlength;
int ntype;
int nbland;
};
void 洗衣服(洗衣机,衣服);
{ //洗衣服函数体
}
int main()
{
洗衣机 海尔洗衣机;
衣服 脏衣服;
洗衣服(海尔洗衣机,脏衣服);
}
//由于洗衣机与衣服之间的关联不够密切
冰箱 海尔冰箱;
洗衣服(海尔冰箱,脏衣服);
//C++语言描述,将洗衣机的功能函数放进函数体中
struct 洗衣机 //class 洗衣机 {······}
{
int nwidth;
int nheight;
int nlength;
int ntype;
int nbland;
void 洗衣服(衣服);
}; //封装
int main()
{
洗衣机 海尔洗衣机;
海尔洗衣机.洗衣服(脏衣服); //调用洗衣机结构体中的洗衣服函数
}
//此时在使用冰箱洗衣服就不能实现了,因为在定义的冰箱中没有洗衣服的功能函数,此处是面向对象的封装性的体现
实例:
1)将长、宽变量和设置长,宽,求面积,以及求周长的
三个函数“封装”在一起,就能形成一个“矩形类”。
2)长、宽变量成为该“矩形类”的“成员变量”,三个
函数成为该类的“成员函数” 。 成员变量和成员函
数统称为类的成员。
3)实际上,“类”看上去就像“带函数的结构”。
#include <iostream>
using 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 << r.Area() << endl <<r.Perimeter();
return 0;
}
(1)成员函数、与成员变量的访问属性:
– private: 私有成员,只能在成员函数内访问
– public : 公有成员,可以在任何地方访问
– protected: 保护成员
(2)使用类的成员变量和成员函数
用法1:对象名.成员名
!!!在class里如果未定义,默认为private。
CRectangle r1,r2;
r1.w = 5;
r2.Init(5,4);
用法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.w = 5;
rr.Init(5,4); //rr的值变了,r2的值也变
void PrintRectangle(CRectangle & r)
{ cout << r.Area() << ","<< r.Perimeter(); }
CRectangle r3;
r3.Init(5,4);
PrintRectangle(r3);