说明 (1)本例中 opl setpoint((1,2)实际上是 opl. point: setpoint(1,2)的 种缩写形式。 (2)外部函数不能引用对象的私有成员。 void main( i point op; int i op setpoint(1, 2) i=0px;∥/错误,不能直接引用对象的私有成员 j=op.y;∥错误,不能直接引用对象的私有成员 cout<<s op 2<<i<<0pJ j=”<j<endl: (3)若定义的是对象指针,则用“->”操作符。 point xop op->setpoint(5, 6); i=op->getx(; j=op->gety o;
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.对象赋值语句 同类型的对象之间也可以进行赋值,当一个对象赋值给另一个对 象时,所有的数据成员都会逐位拷贝。 例3.4 #include <iostream. h 1)对象赋值时,两 class myclass 个对象的类型必须 int a. b: 相同。 public void set(int i, int j a-i; b=j;) (2)对象赋值时,仅 void showO{cout<<a<<““<<b<endl;y 仅使对象中的数据 相同,两个对象仍 void maino 是独立的。 f myclass o1, 02; (3)两个对象赋值时, 0lset(20,5); 多数情况是成功的, 02=01 /将对象1的值赋给将对象02但当类中有指针成 ol.Showo: 员时,可能会发生 )2 show; 错误。 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类的作用域 所谓类的作用域就是指在类的声明中的一对花括号所形成的作用域 个类的成员函数可以不受限制地引用该类的数据成员,而在该 类作用域之外,对该类的数据成员和成员函数的引用则要受到 定的限制,有时甚至是不允许的。这体现了类的封装性 例35 void maino #include <iostre i abc ob; lass abct obe(2);/通过成员函数给数据成员]赋初值2 public ob. dispo int is i=1;∥法,不能直接引用类中的数据成员i,可 void set(i void disp( ∥改为ob=1; i cout<< ob. dispo void abc: set(int si) i=si;}成员函数可以直接引用类中的数据成员i int funO { return is;}∥/非法,不能直接引用类中的数据成员i
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
315定义类 1.说明类 C++中说明类的一般形式为 clsa类名{ private:(可缺省) 私有数据和函数(私有成员) rotected 保护段 ublic. 公有数据和函数(公有成员) 2.类标识符
14 *3.1.5 定义类 1. 说明类 C++中说明类的一般形式为 clsaa 类名 { private: (可缺省) 私有数据和函数 (私有成员) protected: 保护段 public: 公有数据和函数 (公有成员) }; 2. 类标识符
3.类体(成员函数体) 成员函数可以在定义类时同时说明和定义 class location i 也可先说明另外单独定义。 private: intX.Y class Location i public private: void init(int init, int ini intX.y: {ⅹ= init; public Y=init: void init(int init, int init) int GetXo; int GetXo i return X int GetO; int Getyo i return Y; void Location: init(int init, int init) i X=init 返回类型类名:成员函数名(参数说明 init: ocation: GetXo irn X; j 类体 ocation: GetYo
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; } 返回类型 类名::成员函数名(参数说明 ) { 类体 }