文档详情

测绘程序设计基础(VC++net)第六章 VC++.net面向对象编程V2.ppt

发布:2017-07-27约2.67万字共114页下载文档
文本预览下载声明
不同对象占据内存中的不同区域,它们所保存的数据各不相同,但对成员数据进行操作的成员函数的程序代码均是一样的。 * 构造函数和析构函数是在类体中说明的两种特殊的成员函数。 构造函数是在创建对象时,使用给定的值来将对象初始化。 析构函数的功能正好相反,是在系统释放对象前,对对象做一些善后工作。 * * 由编译器为每个类产生的这种隐含的完成拷贝功能的构造函数,依次完成类中对应数据成员的拷贝。 * 由于派生类可继承基类的成员变量和成员函数,因此在基类中定义好的数据和函数等的程序代码可重复使用,这样可以提高程序的可靠性。 * * class A { float x, y; public: A(float a=0, float b=0){ x=a; y=b; } A operator ++( ){A t; t.x=++ x; t.y=++y; return t;} A operator ++(int) { A t; t.x=x++; t.y=y++; return t;} }; void main(void) { A a(2,3), b; b=++a; b=a++; } * A operator ++( ) { A t; t.x=++ x; t.y=++y; return t; } b=++a; b=a.operator++( ); 返回值 函数名 2 3 a t 3 3 4 4 t作为函数值返回赋给b A operator ++( ) { ++ x; ++y; return *this; } 将对象本身作为函数值返回赋给b * A operator ++(int) { A t; t.x=x++; t.y=y++; return t; } b=a++; b=a.operator++(3); 2 3 a t 3 2 4 3 返回值 函数名 t作为函数值返回赋给b * 用成员函数实现运算符的重载时,运算符的左操作数为当前对象,并且要用到隐含的this指针。运算符重载函数不能定义为静态的成员函数,因为静态的成员函数中没有this指针。 * 运算符重载为友元函数 运算符重载为成员函数时,是由一个操作数调用另一个操作数。 A a ,b , c; c=a+b; 实际上是c=a.operator+(b); c=++a; 实际上是c=a.operator++( ); 即函数的实参只有一个或没有。 c+=a; 实际上是c.operator+=( a ); 重载+= 友元函数是在类外的普通函数,与一般函数的区别是可以调用类中的私有或保护数据。 将运算符的重载函数定义为友元函数,参与运算的对象全部成为函数参数。 A a ,b , c; c=a+b; 实际上是 c=operator+(a, b); c=++a; 实际上是 c=operator++(a); c+=a; 实际上是 operator+=( c, a ); * 对双目运算符,友元函数有2个参数,对单目运算符,友元函数有一个参数。有些运算符不能重载为友元函数,它们是:=,(),[ ],-等 格式为: friend 类型说明 operator运算符(参数表) {......} c=a+b; // c=operator+( a, b) friend A operator + (A a, A b) {.....} * class A { int i; public:public: A(int a=0) { i=a; } void Show(void) { couti=iendl; } friend A operator +(A ,A );//友元函数,两个参数,为引用 }; A operator +(A a , A b) {A t; t.i=a.i+b.i; return t; } void main(void) { A a1(10),a2(20),a3; a1.Show (); a2.Show (); a3=a1+a2; //重新解释了加法,可以直接进行类的运算 a3.Show (); } 相当于a3=operator+(a1,a2) * 对双目运算符,重载为成员函数时,仅一个参数,另一个被隐含;重载为友元函数时,有两个参数,没有隐含参数。 一般来说,单目运算符最好被重载为成员函数;对双目运算符最好被重载友元函数。 6.5矩阵类设计示例 * 继承性是面向对象程序设计中最重要的机制。这种机制提供了无限重复利用程序资源的一种途径。通过C++语言中的继承机制,可以扩充和完善旧
显示全部
相似文档