第6章类与对象 6.1类与对象 6.2构造函数与析构函数 6.3类的组合 64友元 6.5静态成员 66对象数组与对象指针 6.7this指针
第6章 类与对象 6.1 类与对象 6.2 构造函数与析构函数 6.3 类的组合 6.4 友元 6.5 静态成员 6.6 对象数组与对象指针 6.7 this指针
第6章类与对象 6.1类与对象 6.1.1类与对象的概念 对象( object):是现实世界中的客观事物 类( class):是把具有相同属性的事物划分为一类,从而得出 的抽象概念。 面向对象程序设计中的类,是具有相同属性和服务的一组对 象的集合,它为属于该类的全部对象提供了抽象的描述。 对象是类的实例,类是同种对象的抽象。 如:确定大小和颜色的矩形都是一个个具体的对象,而将所有矩形的共同特 点抽象出来,就是一个矩形 这些共有的属性包括颜色(coor),左上角坐标(left,top),长( length)和 宽(wdth)等; 对这些属性的处理包括改变矩形的颜色( Setcolor)和大小( Setsize),移 动矩形到新的位置(Move),绘出矩形(Draw)等。将矩形的这些属性和方法作
6.1 类与对象 6.1.1 类与对象的概念 对象(object):是现实世界中的客观事物。 类(class):是把具有相同属性的事物划分为一类,从而得出 的抽象概念。 面向对象程序设计中的类,是具有相同属性和服务的一组对 象的集合,它为属于该类的全部对象提供了抽象的描述。 对象是类的实例,类是同种对象的抽象。 第6章 类与对象 如:确定大小和颜色的矩形都是一个个具体的对象,而将所有矩形的共同特 点抽象出来,就是一个矩形类。 这些共有的属性包括颜色( color ),左上角坐标 ( left, top ),长 ( length )和 宽 ( width ) 等; 对这些属性的处理包括改变矩形的颜色( SetColor ) 和大小 ( SetSize ) ,移 动矩形到新的位置 ( Move ),绘出矩形 ( Draw ) 等。将矩形的这些属性和方法作 为一个整体,封装在一起形成一个矩形类
第6章类与对象 6.1类与对象 6.12类的声明 cass类名 private 私有数据成员和成员函数 protected 保护数据成员和成员函数 public 公有数据成员和成员函数;
6.1 类与对象 6.1.2 类的声明 class 类名 { private: 私有数据成员和成员函数; protected: 保护数据成员和成员函数; public: 公有数据成员和成员函数; }; 第6章 类与对象
第6章类与对象 例61定义一个长方形类 CRect,其数据成员包括颜色,左上 角坐标,长和宽,其函数成员包括改变矩形的颜色( Setcolor) 和大小( Setsize),移动矩形到新的位置(Move),绘出矩 形(DraW)。 class Crect private char color[10] int left 给lef赋初值: int left105,是否可 int top; 以???? int length int width public void Setcolor(char *c) void Setsize(int I, int W); void Move(int t, int D) void Draw
例6.1 定义一个长方形类CRect,其数据成员包括颜色,左上 角坐标,长和宽,其函数成员包括改变矩形的颜色(SetColor) 和大小(SetSize),移动矩形到新的位置(Move),绘出矩 形(Draw)。 class CRect { private: char color[10]; int left; int top; int length; int width; public: void SetColor(char *c); void SetSize(int l, int w); void Move(int t,int l); void Draw(); }; 第6章 类与对象 给left赋初值:int left=10.5,是否可 以????
第6章类与对象 例6.1(续一) void crect: Setcolor(char *c) strcpy(color,c) void CRect: Setsize(int I, int w) length=l 域运算符(∷)用于指出该函数是 width w 哪一个类的成员函数,用法 类名:函数名(参数表 void CRect: Move(int t, int D) top=t left = I H yoid CRect. Drawo cut<<"矩形左上角坐标为(<le<"<top<"<end cout<"矩形长和宽分别为"< ength<"<Wdth<endl;‖ cout<<"矩形的颜色是"<< color<<endl;
例6.1 (续一) void CRect::SetColor(char *c) { strcpy(color, c); } void CRect::SetSize(int l, int w) { length=l; width = w; } void CRect::Move(int t,int l) { top = t; left = l; } void CRect::Draw() { cout << "矩形左上角坐标为(" << left << "," << top << ")" << endl; cout << "矩形长和宽分别为" << length << "," << width << endl; cout << "矩形的颜色是" << color << endl; } 第6章 类与对象 域运算符(::)用于指出该函数是 哪一个类的成员函数,用法: 类名::函数名(参数表)
第6章类与对象 例6.1(续二) void maino 定义cRec类的对象,定义对象的 格式 CRect r 类名对象名1,对象名2,… Setcolor("Red") r Move(10, 20) r Setsize(100, 200) 访问对象的公有成员,格式为 对象名公有成员函数名(参数表) r Draw 对象名公有数据成员名 r Move(50,50); r SetColor("Blue") 程序运行结果为 r Draw 矩形左上角坐标为(20,10) 矩形长和宽分别为100,200 矩形的颜色是Red 矩形左上角坐标为(50,50) 矩形长和宽分别为100,200 矩形的颜色是Bue
例6.1 (续二) void main() { CRect r; r.SetColor("Red"); r.Move(10,20); r.SetSize(100,200); r.Draw(); r.Move(50,50); r.SetColor("Blue"); r.Draw(); } 第6章 类与对象 定义CRect类的对象,定义对象的 格式: 类名 对象名1,对象名2,…… 访问对象的公有成员,格式为: 对象名.公有成员函数名(参数表) 对象名.公有数据成员名 程序运行结果为: 矩形左上角坐标为(20,10) 矩形长和宽分别为100,200 矩形的颜色是Red 矩形左上角坐标为(50,50) 矩形长和宽分别为100,200 矩形的颜色是Blue
第6章类与对象 6.1类与对象 6.1.3成员的访问控制 private:私有访问权限,只允许类中的成员函数访问,其他函 数不能访问。 protected:保护访问权限,在第7章中介绍。 public:公有访问权限,在任何函数中都可以访问。 例:若主函数中有以下语句,是否正确? CRect r strcpy( r color, red) 「top=10; 在主函数中不能访问类的私有成员, r left=20
6.1 类与对象 6.1.3 成员的访问控制 private: 私有访问权限,只允许类中的成员函数访问,其他函 数不能访问。 protected: 保护访问权限,在第7章中介绍。 public: 公有访问权限,在任何函数中都可以访问。 例:若主函数中有以下语句,是否正确? CRect r; strcpy( r.color , “red”); r.top = 10; r.left = 20; 第6章 类与对象 在主函数中不能访问类的私有成员
第6章类与对象 6.1类与对象 6.1.3成员的访问控制(续) 若不指定类中的成员的访问权限,则默认为私有成员 类也可以由 struct关键字声明, strust与cass的区别是:如果 不指定访问权限,前者缺省的访问权限是公有的,而后者是私有 的。用 struc声明前面的矩形类: struct CRect void SetColor(char*c) void Setsize(int I, int w) void Move (int t,intl void Draw private char color[10: t left int top t length int width
6.1 类与对象 6.1.3 成员的访问控制(续) 若不指定类中的成员的访问权限,则默认为私有成员。 类也可以由struct关键字声明,strust与class的区别是:如果 不指定访问权限,前者缺省的访问权限是公有的,而后者是私有 的。用struct声明前面的矩形类: struct CRect { void SetColor(char *c); void SetSize(int l, int w); void Move(int t,int l); void Draw(); private: char color[10]; int left; int top; int length; int width; }; 第6章 类与对象
类的数据成员和成员函数总结: 类的成员函数可以直接访问自己类的私有成员 类外面的函数不能直接访问类的私有成员( 数据成员和成员函数) 类外面的函数只能通过类的对象使用该类公有 成员函数。 对象a和b的区别是属性的取值
类的数据成员和成员函数总结: • 类的成员函数可以直接访问自己类的私有成员。 • 类外面的函数不能直接访问类的 私有成员( 数据成员和成员函数) • 类外面的函数只能通过类的对象使用该类公有 成员函数。 • 对象a和b的区别是属性的取值
第6章类与对象 6.1类与对象 6.14类的成员函数 1.类成员函数的定义方式 在类外部定义:如前面定义的长方形类的成员函数 般格式为 函数类型类名:成员函数名(参数说明) 函数体 在类中定义:如 class crect public: void setcolor( char*c X strcpy( color, c);)
6.1 类与对象 6.1.4 类的成员函数 1. 类成员函数的定义方式 ➢在类外部定义:如前面定义的长方形类的成员函数 一般格式为: 函数类型 类名::成员函数名(参数说明) { 函数体 } ➢在类中定义:如 class CRect { …… public: void setcolor( char *c ){ strcpy( color , c ); } …… }; 第6章 类与对象