SRM Vision 暑期培训

by Leozheng @ SRMVision

§4  面向对象编程概述 / 类与对象

SRM-Vision-2022
├───assets       # 资源文件
├───config       # 配置参数

├───docs          # 说明文件与照片

├───modules   # 程序

│        ├───camera  #相机驱动

│        ├───controller # 控制器

│        │        ├───controller.h        #控制器类定义

│        │        └───controller.cpp    #控制器类实现

│        └───.........

├───main.cpp          # 主函数

├───README.md    # 项目说明

└───............

class Controller {
public:
    // 这四个函数非常特殊, 详见后文
    Controller(int id);
    Controller();
    Controller(const Controller &controller);
    ~Controller();
    
    bool Initialize(); // 初始化控制器
    void Run(); // 控制器运行
    
protected:
    // 保护成员函数
    void ReceiveData(); // 接收数据
    void ProcessData(); // 处理数据
    void SendData(); // 发送数据
    
    // 保护数据成员
    int robot_id_;
    double send_data_; // 控制器接受到的数据
    double *receive_data_; // 控制器发送的数据
};

3.2 类与对象

#include <iostream>
using namespace std;
class Foo {
public:
    void bar();
private:
    int b;
};
void Foo::bar() {
    int b = 2; // b 为局部变量
    this->b = 3; // this->b 为成员数据
    cout << b << endl << this->b << endl;
}
int main() {
    Foo foo;
    foo.bar();
    return 0;
}

3.2 类与对象

#include <iostream>
using namespace std;
class Foo {
public:
    static void fun();
    void bar();
private:
    static int static_value;
    int value = 0;
};

int Foo::static_value = 0; // static 成员必须在类外初始化
void Foo::fun() {
    ++static_value;
    // ++value  // wrong.
}
void Foo::bar(){
    ++static_value;
    ++value;
    cout << static_value << " " << value << endl;
}
int main() {
    Foo foo_1,foo_2;
    foo_1.bar(); // 1 1
    foo_2.bar(); // 2 1
    return 0;
}

3.2 类与对象

#include <iostream>
using namespace std;
class Foo {
public:
    // 只读访问, 只能返回 const int &, 注意两个 const 的区别
    const int &value_read() const { return value; }
    // 读写访问
    int &value_rw() { return value; }
    
private:
    int value = 0;
};

int main() {
    Foo foo;
    cout << foo.value_read() << endl; // 输出 0
    foo.value_rw() = 1; // 没有 const 且传出引用, 默认可以修改
    // foo.value_read() = 1; // 只读访问, 不可修改
    cout << foo.value_rw() << endl; // 输出 1
    return 0;
}

3.2 类与对象

第四讲 - 作业:

请修改并优化上一讲的时钟程序,要求:

1. 面向对象实现,规范文件结构,类的申明与实现分开在.h与.cpp中。

2. 规范设计成员函数与成员变量的访问范围。

3. 程序需要有:显示当前时间、修改时间的功能,其他请自由发挥。

感 谢

@ SRMVision