zoukankan      html  css  js  c++  java
  • Ⅰ 类与对象②

    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

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

  • 相关阅读:
    java算法--循环队列
    java算法--普通队列
    java算法--稀疏数组
    HelloWorld
    css
    自定义事件并且主动触发
    数组字符串操作
    进阶路上有你我-相互相持篇之ES6里箭头函数里的this指向问题
    关于一道面试题
    异步函数回调
  • 原文地址:https://www.cnblogs.com/syzyaa/p/12690894.html
Copyright © 2011-2022 走看看