说明 (1)本例中 opl setpoint(1,2)实际上是 opl. point: setpoint(1,2)的一 种缩写形式。 (2)外部函数不能引用对象的私有成员。 void maino i point op int i op setpoint(1, 2) i=opx;∥错误,不能直接引用对象的私有成员 j=0py;∥错误,不能直接引用对象的私有成员 cout<<“0pi”<<<“0pj=j<<end (3)若定义的是对象指针,则用“->”操作符。 point“op: op->setpoint(5, 6); op->getxo j=op->gety 0;
11 说明 (1) 本例中op1.setpoint(1,2)实际上是op1.point::setpoint(1,2)的一 种缩写形式。 (2) 外部函数不能引用对象的私有成员。 void main() { point op; int i, j; op.setpoint(1,2); i=op.x; //错误,不能直接引用对象的私有成员 j=op.y; //错误,不能直接引用对象的私有成员 cout<<“op i=”<<i<<“ op j=”<<j<<endl; } (3)若定义的是对象指针,则用“->”操作符。 point *op; op->setpoint(5,6); i=op->getx(); j=op->gety();
4.对象赋值语句 同类型的对象之间也可以进行赋值,当一个对象赋值给另一个对 象时,所有的数据成员都会逐位拷贝。 例34 #include <iostream.h> 1)对象赋值时,两 lass myclass 个对象的类型必须 int a, b; 相同。 public: void set(int i, intj=i; b=j; (2)对象赋值时,仅 仅使对象中的数据 void showO{cout<a<““<b<enlN相同,两个对象仍 void main( 是独立的。 i myclass o1, 02; (3)两个对象赋值时, 0lset(20,5); 多数情况是成功的, 02=01;/将对象o1的值赋给将对象02但当类中有指针成 ol show; 员时,可能会发生 o2show; 错误。 12
12 4. 对象赋值语句 同类型的对象之间也可以进行赋值,当一个对象赋值给另一个对 象时,所有的数据成员都会逐位拷贝。 例 3.4 #include <iostream.h> class myclass{ int a,b; public: void set(int i, int j) { a=i; b=j; } void show() { cout<<a<<“ “<<b<<endl; } }; void main( ) { myclass o1, o2; o1.set(20,5); o2=o1; //将对象o1的值赋给将对象o2 o1.show(); o2.show(); } (1)对象赋值时,两 个对象的类型必须 相同。 (2)对象赋值时,仅 仅使对象中的数据 相同,两个对象仍 是独立的。 (3)两个对象赋值时, 多数情况是成功的, 但当类中有指针成 员时,可能会发生 错误
314类的作用域 所谓类的作用域就是指在类的声明中的一对花括号所形成的作用域 个类的成员函数可以不受限制地引用该类的数据成员,而在该 类作用域之外,对该类的数据成员和成员函数的引用则要受到一 定的限制,有时甚至是不允许的。这体现了类的封装性。 例3.5 void mainO #include <iostre i abc ob lass abc ob.set(2);/通过成员函数给数据成员调赋初值2 public: ob. dispo; i=1;/非法,不能直接引用类中的数据成员i,可 void set( void disp( ∥改为obi=1; cou<、ob.disp(; void abc: set(int si) {i=si;}∥成员函数可以直接引用类中的数据成员i int funo { return i;}∥/非法,不能直接引用类中的数据成员i 13
13 3.1.4 类的作用域 所谓类的作用域就是指在类的声明中的一对花括号所形成的作用域。 一个类的成员函数可以不受限制地引用该类的数据成员,而在该 类作用域之外,对该类的数据成员和成员函数的引用则要受到一 定的限制,有时甚至是不允许的。这体现了类的封装性。 例 3.5 #include <iostream.h> class abc{ public: int i; void set(int); void disp() { cout<<“i=“<<i<<endl; }//可以直接引用类中的数据成员i }; void main() { abc ob; ob.set(2); //通过成员函数给数据成员i赋初值2 ob.disp(); i=1; //非法,不能直接引用类中的数据成员i,可 // 改为ob.i=1; ob.disp(); } void abc::set(int si) { i=si;} //成员函数可以直接引用类中的数据成员i int fun() {return i; } //非法,不能直接引用类中的数据成员i
31.5定义类 1.说明类 C+中说明类的一般形式为 clsaa类名{ private:(可缺省) 私有数据和函数(私有成员) protected: 保护段 public: 公有数据和函数(公有成员) 2.类标识符
14 *3.1.5 定义类 1. 说明类 C++中说明类的一般形式为 clsaa 类名 { private: (可缺省) 私有数据和函数 (私有成员) protected: 保护段 public: 公有数据和函数 (公有成员) }; 2. 类标识符
3类体(成员函数体) 成员函数可以在定义类时同时说明和定义 class location 也可先说明另外单独定义 private: int X.y: class location i public: private void init(int init, int in intX.Y i XinitX; p ublic. Y=init void init(int init, int initY) int Getxo; int Getxoi return X int GetO int Getyoi return Y; void Location: init(int init, int init) i X-initX 返回类型类名:成员函数名(参数说明 nitY cation:: GetXO rnX; 类体 cation: GetY 0 Irn Y
3. 类体(成员函数体) 成员函数可以在定义类时同时说明和定义 class Location { private: int X, Y; public: void init(int initX, int initY) { X=initX; Y=initY; }; int GetX() { return X;}; int GetY() { return Y;}; } 也可先说明另外单独定义。 class Location { private: int X, Y; public: void init(int initX, int initY) int GetX(); int GetY(); }; void Location::init(int initX, int initY) { X=initX; Y=initY; } int Location::GetX() { return X; } int Location::GetY() { return Y; } 返回类型 类名::成员函数名(参数说明 ) { 类体 }