C+语言程序设计 第6讲:数组、指针与字符串
C++语言程序设计 第6讲: 数组、指针与字符串
友元 friend 癱友元是C+提供的一种破坏数据封装和数 据隐藏的机制。 通过将一个模块声明为另一个模块的友元, 个模块能够引用到另一个模块中本是被 隐藏的信息。 可以使用友元函数和友元类 癱为了确保数据的完整性,及数据封装与隐 藏的原则,建议尽量不使用或少使用友元
友元 friend 友元是C++提供的一种破坏数据封装和数 据隐藏的机制。 通过将一个模块声明为另一个模块的友元, 一个模块能够引用到另一个模块中本是被 隐藏的信息。 可以使用友元函数和友元类。 为了确保数据的完整性,及数据封装与隐 藏的原则,建议尽量不使用或少使用友元
例5-6:使用友元函数计算两点距离 a1 ass point// Point类声明 public //外部接口 Point(int xx=o, int yy=o)X=xx; Y=yy i b nt Getxoi return xi int Gety( return Y, I friend float fDist (Point &a, point &b) private //私有数据成员 int Xy float fDi int main() double d i point myp(1 of, 1. 0f), myp2 (4. 0f, 5. 0f) double cout<<The distance is i re七urn cout<< fDist (mypl, myp2) << endli return 0:
例5-6: 使用友元函数计算两点距离 class Point //Point类声明 { public: //外部接口 Point(int xx=0, int yy=0) {X=xx;Y=yy;} int GetX() { return X; } int GetY() { return Y; } friend float fDist (Point &a, Point &b); private: //私有数据成员 int X,Y; }; float fDist ( Point& a, Point& b ) { double dx = a.X-b.X; double dy = a.Y-b.Y; return (float)sqrt(dx*dx+dy*dy); } int main() { Point myp1(1.0f, 1.0f), myp2(4.0f, 5.0f); cout<<"The distance is “; cout<< fDist (myp1, myp2) << endl; return 0; }
友元类 class A friend class B void B: Set(int i) public void Display cout < x < endl F private Int xi 访问A的私有成员 class B ⅴoidB:: Display() I public void Set(int i) void Display() a Display ()i private: aa 但在A中不能访问B的私有成员
友元类 class A { friend class B; public: void Display() { cout << x << endl; } private: int x; } class B { public: void Set(int i); void Display(); private: A a; }; void B::Set(int i) { a.x = i; } void B::Display() { a.Display(); } 访问A的私有成员 但在 A 中不能访问 B 的私有成员。!!!
常类型 const 常类型是只读的意思 癱常类型的对象必须进行初始化,而且不能 被更新 癱常引用:被引用的对象不能被更新 const类型说明符&引用名 常对象:必须进行初始化,不能被更新 类名 cons t对象名
常类型 const 常类型是只读的意思。 常类型的对象必须进行初始化,而且不能 被更新。 常引用:被引用的对象不能被更新。 const 类型说明符 &引用名 常对象:必须进行初始化,不能被更新。 类名 const 对象名
常对象举例 class A public: A(int ir int 3)(x i Y j;} private int x,yi A const a(3,4);//a是常对象,不能被修改
常对象举例 class A { public: A(int i,int j) { x = i; y = j; } ... private: int x,y; }; A const a(3,4); // a是常对象,不能被修改
例5-8:常成员函数举例 class R public: R(int rl int r2)i RI rl; R2= r2; void print o)i void print()consti private int Rl r2: int main() void R:: printo) Ra(5,4); f cout<<R1<<" <<R2<4 a print( //调用 void print() void R:: print()cons const R b(20,52)i b. print () cout<<R1<<";"<<R2< //调用 void print() const
例5-8: 常成员函数举例 class R { public: R(int r1, int r2){ R1 = r1; R2 = r2; } void print(); void print() const; private: int R1,R2; }; void R::print() { cout<<R1<<":"<<R2<<endl; } void R::print() const { cout<<R1<<";"<<R2<<endl; } int main() { R a(5,4); a.print(); //调用void print() const R b(20,52); b.print(); //调用void print() const }
例5-9:常数据成员举例 class A public int main() A(int i) /*建立对象a和b,并以100和0作为初值, void print() 分别调用构造函数,通过构造函数的初始化 const int& r 列表给对象的常数据成员赋初值* private Aa1(100),a2(0); const int ai al.print()i static const int b a2.print() const int A: b=10; 运行结果: A: A(int i): a(i)r(a)[] void A:: printo 100:10:100 cout<<a<<":"<<b<<":"<<r<< 0:10:0
例5-9: 常数据成员举例 class A {public: A(int i); void print(); const int& r; private: const int a; static const int b; //静态常数据成员 }; const int A::b=10; A::A(int i): a(i), r(a) {} void A::print() { cout<<a<<":"<<b<<":"<<r<<endl; } int main() {/*建立对象a和b,并以100和0作为初值, 分别调用构造函数,通过构造函数的初始化 列表给对象的常数据成员赋初值*/ A a1(100),a2(0); a1.print(); a2.print(); } 运行结果: 100:10:100 0:10:0
数组 数组必须先声明,后使用 维数组的声明 数据类型数组名[常量表达式] 例如:intb[0 表示b为整型数组,有10个元素:b[O]..b[9] 多维数组的声明: 数据类型标识符[常量表达式们常量表达式2] ●例如:inta[5][3] 表示a为整型二维数组,其中第一维有5个下标 (0~4),第二维有3个下标(0~2),数组的元素个 数为15,可以用于存放5行3列的整型数据表格
数组 数组必须先声明,后使用。 一维数组的声明: 数据类型 数组名[ 常量表达式 ]; 例如:int b[10]; 表示 b 为整型数组,有10个元素:b[0]...b[9] 多维数组的声明: 数据类型 标识符[常量表达式1][常量表达式2] …; 例如:int a[5][3]; 表示a为整型二维数组,其中第一维有5个下标 (0~4),第二维有3个下标(0~2),数组的元素个 数为15,可以用于存放5行3列的整型数据表格
例6-1 输出 int main o 新intA[10],B[10]; A[0]=-1B[0]=17 for(inti=0;<10;立++) A[1]=1B[1]=15 A[]=*2-1; A[2]=3B[2]=13 B[10-1-1]=A[i]; A[3]=5B[3]=11 for(=0;<10;1++) A[4]=7B[4]=9 A[5]=9B[5]=7 cout<<"A["<<主<"] cout < Bl<< i<<nA[6]=11BI6]=5 A[7]=13B[7]=3 A[8]=15B[8]=1 A[9]=17B[9]=-1
int main() { int A[10], B[10]; for(int i=0;i<10;i++) { A[i]=i*2-1; B[10-i-1]=A[i]; } for(i=0;i<10;i++) { cout << "A[" << i << "]=“ << A[i]; cout << " B[" << i << "]=" << B[i]<<endl; } } 例6-1:数组的说明与使用 输出: A[0]=-1 B[0]=17 A[1]=1 B[1]=15 A[2]=3 B[2]=13 A[3]=5 B[3]=11 A[4]=7 B[4]=9 A[5]=9 B[5]=7 A[6]=11 B[6]=5 A[7]=13 B[7]=3 A[8]=15 B[8]=1 A[9]=17 B[9]=-1