12.2 方法的编译 class Point public GraphicalObj double xc,yc; public void translate (double x offset,double y_offset){ xc +=x_offset;yc +=y_offset; void scale (double factor){ xc *=factor;yc *=factor; Point(double x0=0,double y0 =0){xc xO;yc y0;} void set(double x0,double y0){xc x0;yc y0;} double x(void){return xc;} double y(void){return yc;} double dist (Point &) ;
12.2 方法的编译 class Point : public GraphicalObj { double xc, yc; public : void translate (double x_offset, double y_offset) { xc += x_offset; yc += y_offset; } void scale (double factor) { xc *= factor; yc *= factor; } Point(double x0 = 0, double y0 = 0) {xc = x0; yc = y0; } void set(double x0, double y0) {xc = x0; yc = y0;} double x(void) {return xc;} double y(void) {return yc;} double dist (Point &); };
12.2 方法的编译 将一个C++语言的类翻译成C语言的程序段,主 要工作有如下几点(由继承引出的问题暂不考虑) 将C++语言中一个类的所有非静态属性构成 个C语言的结构体类型,取类的名字作为结构 体类型的名字 类的静态属性是该类的所有对象所共有的,应 当翻译成C中的全局变量,但是需要改一个名 字 C++语言中类的对象声明不加翻译就成了C语 言中相应结构体类型的变量声明
12.2 方法的编译 将一个C++语言的类翻译成C语言的程序段,主 要工作有如下几点(由继承引出的问题暂不考虑) • 将C++语言中一个类的所有非静态属性构成一 个C语言的结构体类型,取类的名字作为结构 体类型的名字 • 类的静态属性是该类的所有对象所共有的,应 当翻译成C中的全局变量,但是需要改一个名 字 • C++语言中类的对象声明不加翻译就成了C语 言中相应结构体类型的变量声明
12.2 方法的编译 将C++语言中类的非静态方法翻译成C语言的 函数,对应的方法和函数的区别有下面几点: 函数的名字必须在原来方法名的基础上修改 -函数声明增加一个形参this 在函数体中出现的函数调用也要增加一个实参 在方法中对本对象的非静态属性的访问,改成对 ts相应域的访问。在方法中对其它对象的非静态 属性的访问不必修改 类的静态方法在定义和调用的地方都需要改名
12.2 方法的编译 • 将C++语言中类的非静态方法翻译成C语言的 函数,对应的方法和函数的区别有下面几点: – 函数的名字必须在原来方法名的基础上修改 – 函数声明增加一个形参this – 在函数体中出现的函数调用也要增加一个实参 – 在方法中对本对象的非静态属性的访问,改成对 this相应域的访问。在方法中对其它对象的非静态 属性的访问不必修改 • 类的静态方法在定义和调用的地方都需要改名