312成员函数的定义 第一种方式是在类定义中只给出成员函数的原型(或者说声明) 而成员函数在类的外部定义。在外部定义的一般形式是: 返回类型类名:函数名(参数表){ ∥函数体 class point ∥定义类 point private: Int x, y; ∥数据成员,二个整数作为xy坐标 ublic: void setpoint(int,int);∥函数成员,名为 setpoint,有二个 整数形参,用于设置坐标值,具体如何在外部再定义,这叫函数 的原型(或者说声萌 int getxo;〃取x坐标值的成员函数 getxo的函数原型 nt ge /类定义结束 取y巫标值的成员函数 geto的函数原型 viod point: setpoint(inta,intb)∥成员函数 setpoint具体定义 b;} int point: getxo ∥成员函数getx具体定义 return x int point: grtyo ∥成员函数gety具体定义 return y
6 3.1.2 成员函数的定义 第一种方式是在类定义中只给出成员函数的原型(或者说声明), 而成员函数在类的外部定义。在外部定义的一般形式是: 返回类型 类名::函数名(参数表){ // 函数体 } class point{ // 定义类 point private: int x, y; // 数据成员,二个整数作为x,y 坐标 public: void setpoint(int, int); // 函数成员,名为setpoint ,有二个 整数形参,用于设置坐标值,具体如何在外部再定义,这叫函数 的原型(或者说声明) int getx(); //取 x 坐标值的成员函数getx()的函数原型 int gety(); //取 y 坐标值的成员函数gety()的函数原型 }; //类定义结束 viod point::setpoint(int a, int b) //成员函数 setpoint 具体定义 { x=a; y=b; } int point:: getx() //成员函数getx 具体定义 { return x; } int point:: grty() //成员函数gety 具体定义 { return y; }
说明 (1)在所定义的成员函数名之前应缀上类名,在类名和函数名之 间应加上分隔符“:”,例如上面例子中的“ point:” (2)在定义成员函数时,对函数所带的参数,不但要说明它的类 型,还要指出其参数名。 (3)在定义成员函数时,其返回类型一定要与函数原型中声明的 返回类型匹配。 第二种方式是将成员函数定义在类的内部,即定义为内置函数。 又可用两种 (1)隐式定义即函数的原型和定义都在类的内部完成 class pointt ∥定义类 point private: Int x, y; ∥数据成员,二个整数作为x,y坐标 public: void setpoint(inta,intb)∥函数成员 {x=a;y=b;} int getxo i return x;) int geto i return y;) };1类定义结束
7 说明 (1)在所定义的成员函数名之前应缀上类名,在类名和函数名之 间应加上分隔符“::”,例如上面例子中的“point::”。 (2)在定义成员函数时,对函数所带的参数,不但要说明它的类 型,还要指出其参数名。 (3)在定义成员函数时,其返回类型一定要与函数原型中声明的 返回类型匹配。 第二种方式是将成员函数定义在类的内部,即定义为内置函数。 又可用两种: (1) 隐式定义 即函数的原型和定义都在类的内部完成 class point{ // 定义类 point private: int x, y; // 数据成员,二个整数作为x,y 坐标 public: void setpoint(int a, int b) // 函数成员 { x=a; y=b; } int getx() { return x; } int gety() { return y; } }; //类定义结束
(2)显式定义 即在类定义中仍只给出成员函数的原型(或者说声明),而成员函 数在类的外部定义。但函数定义前冠以关键字“ inline”,以此显 式地说明这是一内置函数。 class pointt ∥定义类 point private: int x, yi ∥数据成员,二个整数作为x,y坐标 public: void setpoint(int,int);∥/函数成员 setpoint,有二个整数形参 int getxo;取x坐标值的成员函数 getxO的函数原型 int gety(;∥取y坐标值的成员函数 geto的函数原型 };1类定义结束 inline viod point: setpoint(inta,intb)∥内置成员函数具体定义 {x=a;y=b;} inline int point: getxo /置成员函数gex具体定义 i return x;j inline int point: grtyo /内置成员函数gety具体定义 freturn y;) 把成员函数设置成内置,可提高执行的效率,但函数体较长的成员 函数都不设置成内置
8 (2) 显式定义 即在类定义中仍只给出成员函数的原型(或者说声明),而成员函 数在类的外部定义。但函数定义前冠以关键字“inline”,以此显 式地说明这是一内置函数。 class point{ // 定义类 point private: int x, y; // 数据成员,二个整数作为x,y 坐标 public: void setpoint(int, int); // 函数成员setpoint ,有二个整数形参 int getx(); //取 x 坐标值的成员函数getx()的函数原型 int gety(); //取 y 坐标值的成员函数gety()的函数原型 }; //类定义结束 inline viod point::setpoint(int a, int b) //内置成员函数具体定义 { x=a; y=b; } inline int point:: getx() //内置成员函数getx 具体定义 { return x; } inline int point:: grty() //内置成员函数gety 具体定义 { return y; } 把成员函数设置成内置,可提高执行的效率,但函数体较长的成员 函数都不设置成内置
33对象的定义及引用 类与对象的关系 可以用整型int和整型变量i之间的来类比。inti 2.对象的定义 (1)在声明类的同时,直接定义对象op1,op2 class point ∥定义类 point private: Int x, y; ∥数据成员,二个整数作为xy坐标 public: void setpoint(int, int) int getx o; int geto 3 opl, op2 (2)声明了类之后,在使用时再定义对象,定义的格式与一般变 量的定义格式相同: point opl.,op2; 说明:(1)声明了一个类便声明了一种类型,它并不接收和存储 具体的值,只有定义了对象后,系统才为对象并且只为对象分配 存储空间。 (2)在声明类的同时定义的对象是一种全局对象,在的 生存期内任何函数都可以使用
9 3.1.3 对象的定义及引用 1. 类与对象的关系 可以用整型int 和整型变量i 之间的来类比。int i ; 2. 对象的定义 (1) 在声明类的同时,直接定义对象 op1, op2 class point{ // 定义类 point private: int x, y; // 数据成员,二个整数作为x,y 坐标 public: void setpoint(int, int); int getx(); int gety(); } op1, op2; (2) 声明了类之后,在使用时再定义对象,定义的格式与一般变 量的定义格式相同: point op1, op2; 说明:(1)声明了一个类便声明了一种类型,它并不接收和存储 具体的值,只有定义了对象后,系统才为对象并且只为对象分配 存储空间。 (2) 在声明类的同时定义的对象是一种全局对象,在它的 生存期内任何函数都可以使用它
3.对象的引用 对象的引用是指对象的成员的引用,不论是数据成员,还是成员 函数,只要是公有的,就可以被外部函数直接引用,引用格式是 对象名.数据成员名或对象名.成员函数名(实参表) 例3.3 #include void maino class poi i point opl, op2 private: int i, j; inx, opl setpoint(,2);调用op1的 Setpoint0,初始化对象op1 public: void 0p2 setpoint3,4);/调用op2的 Setpoint0,初始化对象op2 i=op1geto;/调用op1的getO,取op1的x值 int ge j= opl. geto;〃/调用op1的 geto,取op1的y值 int ge cout<<“opli=”<i<<“oplj=”< j<<endl i=0p2gexO);∥调用op2的 getxO,取op2的x值 j=0p2 geto;∥调用op2的 geto,取op2的y值 cout<<“op2i=”<“0p2j=”j<endl;
10 3.对象的引用 对象的引用是指对象的成员的引用,不论是数据成员,还是成员 函数,只要是公有的,就可以被外部函数直接引用,引用格式是: 对象名. 数据成员名 或 对象名. 成员函数名(实参表) 例 3.3 #include <iostream.h> class point{ private: int x, y; public: void setpoint(int a, int b) { x=a; y=b; } int getx() { return x; } int gety() { return y; } }; void main() { point op1, op2; int i, j; op1.setpoint(1,2);//调用op1的setpoint(),初始化对象op1 op2.setpoint(3,4);//调用op2的setpoint(),初始化对象op2 i=op1.getx(); //调用op1的getx(),取op1的x值 j=op1.gety(); //调用op1的gety(),取op1的y值 cout<<“op1 i=”<<i<<“ op1 j=”<<j<<endl; i=op2.getx(); //调用op2的getx(),取op2的x值 j=op2.gety(); //调用op2的gety(),取op2的y值 cout<<“op2 i=”<<i<<“ op2 j=”<<j<<endl; }