Ⅰ 类与对象②

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

不由用户直接调用,而是在特定事件或条件发生时(如键盘被按下、鼠标单击等),
由操作系统调用并给该函数发送一个消息,用于对该事件或条件进行响应。

 

posted @ 2020-04-14 06:52  ananasaa  阅读(177)  评论(0编辑  收藏  举报