2.3 拷贝构造函数
2.3.1 作用
把之前对象的数据赋值给新的对象
拷贝函数的(形参)是本类的对象的引用&
2.3.1 何时用?
2.4 浅拷贝和深拷贝
修改s里的内容,scopy也会随之改变,拷贝了跟没拷贝有啥区别。。
原因:两者指针指的地方是一样的,内存区域不变(s = sObj.s;)
两者指的地方不一样了,s又new char了一个新的地方,就不会随s改变而改变了
例一:设计圆类
#include <iostream> using namespace std; const float PI = 3.1416; class CCircle { float x, y; unsigned long clr; float r; public: CCircle(float _x=0, float _y=0, float _r=0, unsigned long _clr=0x00FF00): x(_x), y(_y), clr(_clr), r(_r) { //构造函数,默认初始化, } double GetArea() { return PI*r*r; } double GetPerimeter() { return 2*PI*r; } void Move(float dx, float dy) { x += dx; y += dy; } void Scale(float s) { r = s*r; } void Draw() { cout << "Circle:" << x << "," << y << ", " << r << endl; } }; int main() { CCircle myCircle(300.0f, 400.0f, 1.5f, 0xFF0000); myCircle.Move(3.0f, 4.0f); myCircle.Scale(2.0f); myCircle.Draw(); cout << myCircle.GetPerimeter() << ", " << myCircle.GetArea() << endl; return 0; }
#include <iostream> #include <graph2d.h> //老师写的,就是厉害啊,自己还有一些不会用的 using namespace std; using namespace graph; //emmm比如这个。。 class CCircle { float x, y; unsigned long clr; float r; public: CCircle(float _x=0, float _y=0, float _r=0, unsigned long _clr=0x00FF00): x(_x), y(_y), clr(_clr), r(_r) { } double GetArea() { return PI*r*r; } double GetPerimeter() { return 2*PI*r; } void Move(float dx, float dy) { x += dx; y += dy; } void Scale(float s) { r = s*r; } void Draw() { setColor(clr); fillCircle(x,y,r); } }; CCircle myCircle(300,400,50.5f,0xFF00FF); //布吉岛啥意思 void display() { myCircle.Draw(); } void keyboard(unsigned char key) { switch(key) { case 'w': myCircle.Move(0,5); break; case 's': myCircle.Move(0,-5); break; case 'a': myCircle.Move(-5,0); break; case 'd': myCircle.Move(5,0); break; case 'z': myCircle.Scale(1.05); break; case 'x': myCircle.Scale(0.95); break; } } int main() { myCircle.Move(3.0f, 4.0f); myCircle.Scale(2.0f); cout << myCircle.GetPerimeter() << ", " << myCircle.GetArea() << endl; initGraph(display,keyboard); return 0; }
## 一、结构与功能
## 二、坐标系统和函数命名
函数命名采用骆驼式命名法,即当函数名由一个或多个单词连在一起时,第一个单词以
小写字母开始,后面的单词首字母均为大写,如上述显示坐标系的 showCoordinate 函数。
坐标系就是普通的,原点在左下角角
按 Esc 键可退出界面,按 F1 可显示帮助信息,按 F2 可显示坐标系,按‘q’键可在
窗口和全屏间切换
## 三、运行机制
回调函数:
函数1的指针作为参数传递给函数2,通过操作函数2来控制函数1
不由用户直接调用,而是在特定事件或条件发生时(如键盘被按下、鼠标单击等),
由操作系统调用并给该函数发送一个消息,用于对该事件或条件进行响应。