面向对象的程序设计方法:
第一步:
将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以用多个变量描述事物的属性);
将这类事物所能进行的行为也归纳出来,形成一个个函数,这些函数可以用来操作数据结构(==这一步叫“抽象
==”)。
第二步:
然后,通过某种语法形式,将数据结构和操作该数据结构的函数“捆绑”在一起,形成一个“类”,从而使得数据结构和操作该数据结构的算法呈现出显而易见的紧密关系,这就是“封装”。
面向对象的程序设计具有四个基本特点
抽象、封装、继承、多态
类和对象:
下面我们定义一个矩形类:
属性:长,宽。
行为:面积,周长,长与宽的大小。
注:定义一个类结束时,必须有分号(;)
长、宽变量成为该“矩形类”的“成员变量,三个函数成为该类的成员函数。 成员变量和成员函数统称为类的成员。
成员函数是可以进行重载以及参数缺省
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;
}
说明:
通过类,可以定义变量。类定义出来的变量,也称为类的实例,就是我们所说的“对象” 。 C++中,类的名字就是用户自定义的类型的名字。可以象使用基本类型那样来使用它。CRectangle 就是一种用户自定义的类型
对象的内存分配:
和结构变量一样,对象所占用的内存空间的大小,等于所有成员变量的大小之和。对于上面的CRectangle类,sizeof(CRectangle) = 8
对象间的运算:
和结构变量一样,对象之间可以用 “=”进行赋值,但是不能用 “==”,“!=”,“>”,“<”“>=”“<=”进行比较,除非这些运算符经过了“重载”。
使用类的成员变量和成员函数:
用法一:
对象名.成员名
CRectangle r1,r2;
r1.w = 5;
r2.Init(5,4);
注: Init函数作用在 r2 上,即Init函数执行期间访问的w 和 h是属于 r2 这个对象的, 执行r2.Init 不会影响到 r1。
用法二:
指针->成员名
CRectangle r1,r2;
CRectangle * p1 = & r1;
CRectangle * p2 = & r2;
p1->w = 5;
p2->Init(5,4); //Init作用在p2指向的对象上
用法三:
引用名.成员名
CRectangle r2;
CRectangle & rr = r2; //这里使用了引用
rr.w = 5;
rr.Init(5,4); //rr的值变了,r2的值也变
类的成员函数可以和类的定义分开写:
class CRectangle
{
public:
int w, h;
int Area() ; //成员函数仅在此声明
int Perimeter();
void Init( int w_,int h_ );
}; //必须有分号
int CRectangle :: Area() {
return w * h;
}
int CRectangle :: Perimeter(){
return 2 * ( w + h);
}
void CRectangle :: Init( int w_,int h_ ) {
w = w_; h = h_;
}
CRectangle :: 表明后面的函数是CRectangle 类的成员函数。