2023吉林大学c++面向对象编程上机实验第三题

【注:解答全部为本人所写,仅供同学们学习时参考使用,请勿照搬抄袭!】

第三题:

我公司为仪器生产企业,目前生产摄像机和行车记录仪两种产品,分别销售给用户。

摄像机包含摄像、图像质量设定、编码算法等属性。

将摄像机增加相应芯片(具有操作菜单、自动拍摄、车速传感器、源代码等功能)后,形成一个行车记录仪。

要求:

设计摄像机类,并请根据下列不同的功能要求,采用不同的继承方式,设计行车记录仪类,并添加测试代码,体验不同继承方式下的成员访问属性。(类设计时可根据需要自行添加数据成员和其他成员函数。)

(1) 行车记录仪的芯片可以使用摄像机的摄像、图像质量设定功能。

   行车记录仪用户可以操作行车记录仪的操作菜单和摄像机的摄像功能。

(2)行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。

     行车记录仪用户仅仅可以操作行车记录仪的操作菜单。

(3) 行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。

     行车记录仪用户仅仅可以操作行车记录仪的操作菜单

     同时其他公司购买行车记录仪,因该公司也用于销售,不得泄露其全部内容

课后:

(1)采用组合方式设计行车记录仪类,增加相应测试代码,体验继承和组合的关系。

(2)分别为继承和组合方式下为各类添加构造函数、析构函数,增加相应测试代码,体验对象的初始化和构造顺序。

(3)将摄像机类和行车记录仪类功能相近的函数(如拍摄、编码等功能函数)设为同名函数,增加相应测试代码,体验同名函数覆盖。

(4)为我公司建立一个多态的产品类层次结构,使用抽象类,测试时,创建一个基类指针的容器,通过基类指针调用虚函数,体验多态。

3.1.1
#include <iostream>

class Camera {
public:
    void setVideoQuality(int quality) {
        // 设置视频质量
    }

    void setEncodingAlgorithm(std::string algorithm) {
        // 设置编码算法
    }

    void startRecording() {
        // 开始录像
    }

    void stopRecording() {
        // 停止录像
    }

    void captureImage() {
        // 拍照
    }

protected:
    // 摄像机的数据成员和其他成员函数
};

class CarRecorder : public Camera {
public:
    void setMenu() {
        // 设置行车记录仪的操作菜单
    }

    void autoCapture() {
        // 自动拍摄
    }

    void setSpeedSensor() {
        // 设置车速传感器
    }

    void captureCode() {
        // 拍摄源代码
    }

    // 可以访问 Camera 类的属性和方法
};

int main() {
    // 测试代码
    CarRecorder recorder;
    recorder.setVideoQuality(1080);
    recorder.setEncodingAlgorithm("H.264");
    recorder.startRecording();
    recorder.autoCapture();
    recorder.setSpeedSensor();
    recorder.captureCode();
    recorder.stopRecording();
    return 0;
}

3.1.2
#include <iostream>

class Camera {
public:
    void setVideoQuality(int quality) {
        // 设置视频质量
    }

    void setEncodingAlgorithm(std::string algorithm) {
        // 设置编码算法
    }

    void captureImage() {
        // 拍照
    }

protected:
    // 摄像机的数据成员和其他成员函数
};

class CarRecorder {
public:
    void setMenu() {
        // 设置行车记录仪的操作菜单
    }

    void autoCapture() {
        // 自动拍摄
    }

    void setSpeedSensor() {
        // 设置车速传感器
    }

    void captureCode() {
        // 拍摄源代码
    }

    // 可以访问 Camera 类的属性和方法
    void setVideoQuality(int quality) {
        camera.setVideoQuality(quality);
    }

    void setEncodingAlgorithm(std::string algorithm) {
        camera.setEncodingAlgorithm(algorithm);
    }

protected:
    Camera camera;
};

int main() {
    // 测试代码
    CarRecorder recorder;
    recorder.setMenu();
    recorder.setVideoQuality(720);
    recorder.setEncodingAlgorithm("H.264");
    recorder.autoCapture();
    recorder.setSpeedSensor();
    recorder.captureCode();
    return 0;
}


3.1.3
#include <iostream>

class Camera {
public:
    void setVideoQuality(int quality) {
        // 设置视频质量
    }

    void setEncodingAlgorithm(std::string algorithm) {
        // 设置编码算法
    }

    void captureImage() {
        // 拍照
    }

protected:
    // 摄像机的数据成员和其他成员函数
};

class CarRecorder : private Camera {
public:
    void setMenu() {
        // 设置行车记录仪的操作菜单
    }

    void autoCapture() {
        // 自动拍摄
    }

    void setSpeedSensor() {
        // 设置车速传感器
    }

    void captureCode() {
        // 拍摄源代码
    }

    std::string getMenu() {
        return "Menu"; // 返回行车记录仪的操作菜单
    }

    // 可以访问 Camera 类的属性和方法
    using Camera::setVideoQuality;
    using Camera::setEncodingAlgorithm;

private:
    // 为了保护摄像和图像质量设定功能,将 Camera 类的所有成员变成私有成员
    using Camera::captureImage;
};

int main() {
    // 测试代码
    CarRecorder recorder;
    recorder.setMenu();
    recorder.setVideoQuality(720);
    recorder.setEncodingAlgorithm("H.264");
    recorder.autoCapture();
    recorder.setSpeedSensor();
    recorder.captureCode();

    // 用户可以访问行车记录仪的操作菜单
    std::cout << recorder.getMenu() << std::endl;

    // 其他公司无法访问 Camera 类的摄像和图像质量设定功能
    // recorder.setVideoQuality(1080); // 编译错误
    // recorder.captureImage(); // 编译错误

    return 0;
}

3.2.1
#include "Camera.h"

class CarRecorder {
public:
    CarRecorder(int videoQuality) : camera_(videoQuality) {}

    void startRecording() {
        // start recording using camera
        camera_.startRecording();
    }

    void stopRecording() {
        // stop recording using camera
        camera_.stopRecording();
    }

    void showMenu() {
        // show recorder menu
        // ...
    }

private:
    Camera camera_;
};
int main() {
    CarRecorder recorder(720);
    recorder.startRecording();
    recorder.showMenu();
    recorder.stopRecording();
    return 0;
}


3.2.2.1
#include <iostream>

// 摄像机类
class Camera {
public:
    Camera() {
        std::cout << "Constructing Camera..." << std::endl;
    }

    ~Camera() {
        std::cout << "Destructing Camera..." << std::endl;
    }
};

// 行车记录仪类,继承自摄像机类
class DrivingRecorder : public Camera {
public:
    DrivingRecorder() {
        std::cout << "Constructing DrivingRecorder..." << std::endl;
    }

    ~DrivingRecorder() {
        std::cout << "Destructing DrivingRecorder..." << std::endl;
    }
};

int main() {
    std::cout << "Testing Inheritance" << std::endl;
    {
        DrivingRecorder dr;
    }

    return 0;
}
3.2.2.2
#include <iostream>

// 摄像机类
class Camera {
public:
    Camera() {
        std::cout << "Constructing Camera..." << std::endl;
    }

    ~Camera() {
        std::cout << "Destructing Camera..." << std::endl;
    }
};

// 行车记录仪类,使用组合方式包含摄像机类
class DrivingRecorder {
public:
    DrivingRecorder() : camera() {
        std::cout << "Constructing DrivingRecorder..." << std::endl;
    }

    ~DrivingRecorder() {
        std::cout << "Destructing DrivingRecorder..." << std::endl;
    }

private:
    Camera camera;
};

int main() {
    std::cout << "Testing Composition" << std::endl;
    {
        DrivingRecorder dr;
    }

    return 0;
}




3.2.3
#include <iostream>
using namespace std;

class Camera {
public:
    Camera() { cout << "Camera constructor" << endl; }
    ~Camera() { cout << "Camera destructor" << endl; }
    void shoot() { cout << "Shoot a video" << endl; }
    void encode() { cout << "Encode the video" << endl; }
};

class CarRecorder : public Camera {
public:
    CarRecorder() { cout << "CarRecorder constructor" << endl; }
    ~CarRecorder() { cout << "CarRecorder destructor" << endl; }
    void shoot() { cout << "Shoot a video and save it" << endl; }
    void encode() { cout << "Encode the video and add time stamp" << endl; }
    void showMenu() { cout << "Show the recorder menu" << endl; }
};

int main() {
    CarRecorder recorder;
    recorder.shoot();  // 调用CarRecorder类的shoot函数
    recorder.encode();  // 调用CarRecorder类的encode函数
    recorder.showMenu();  // 调用CarRecorder类的showMenu函数

    recorder.Camera::shoot();  // 调用Camera类的shoot函数
    recorder.Camera::encode();  // 调用Camera类的encode函数

    return 0;
}

3.2.4
// 抽象基类 Product
class Product {
public:
    virtual ~Product() {}
    virtual void printDescription() = 0; // 纯虚函数
};

// 摄像机类 Camera 继承自 Product
class Camera : public Product {
public:
    virtual void printDescription() override {
        std::cout << "This is a camera." << std::endl;
    }
    // 其他摄像机类相关的成员函数和数据成员
};

// 行车记录仪类 DashCam 继承自 Product
class DashCam : public Product {
public:
    virtual void printDescription() override {
        std::cout << "This is a dash cam." << std::endl;
    }
    // 其他行车记录仪类相关的成员函数和数据成员
};

// 生产线类 ProductionLine
class ProductionLine {
private:
    std::vector<Product*> products; // 产品的基类指针容器
public:
    ~ProductionLine() {
        for (auto p : products) {
            delete p;
        }
    }

    // 添加产品的方法,根据产品类型的不同,创建不同的子类实例并添加到容器中
    void addProduct(const std::string& type) {
        if (type == "camera") {
            products.push_back(new Camera());
        } else if (type == "dash cam") {
            products.push_back(new DashCam());
        } else {
            std::cout << "Invalid product type!" << std::endl;
        }
    }

    // 打印产品的描述信息
    void printProductDescriptions() {
        for (auto p : products) {
            p->printDescription(); // 调用虚函数,体验多态
        }
    }
};
int main() {
    ProductionLine pl;
    pl.addProduct("camera");
    pl.addProduct("dash cam");
    pl.addProduct("invalid product");

    pl.printProductDescriptions();

    return 0;
}

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了方便,把代码放在Word里面了,每次上机实验目代码都在。 第一次: 对如下多项式编写类定义: + + +…+ 其中,n为多项式的次数。完成如下功能: (1) 可存储任意大的多项式(提示:可用动态数组实现)。 (2) 定义构造函数、析构函数、拷贝构造函数。 (3) 包含一个static成员存储定义的多项式的数量。 (4) 定义一个成员函数输出多项式。(可参照-x^4-6x^3+5格式输出) (5) 定义一个成员函数计算多项式的值。 (6) 写main函数测试类的功能。 (7) 采用多文件实现。 考虑:哪些成员函数可以声明为const. 第二次: (8) 重载“+”运算符,实现两个多项式相加。 (9) 重载“-”运算符,实现两个多项式相减。 (10) 重载“*”运算符,实现两个多项式相乘。 (11) 重载“=”运算符,实现两个多项式的赋值运算。 考虑:把其中某个运算符重载为友元函数。 第三次: C++的一般编译器都定义和封装了字符串功能,请模仿定义string类的实现,可以实现并支持如下功能: (1)string s = “吉林大学”; (2)string t = s; (3)string m; m = t; (4)m.legnth() 函数测量字符串的长度 (5)m.cat(string const &)连接字符串 第四次: 我公司为仪器生产企业,目前生产摄像机和行车记录仪两种产品,分别销售给用户。 摄像机包含摄像、图像质量设定、编码算法等属性。 将摄像机增加相应芯片(具有操作菜单、自动拍摄、车速传感器、源代码等功能)后,形成一个行车记录仪。 要求: 设计摄像机类,并请根据下列不同的功能要求,采用不同的继承方式,设计行车记录仪类,并添加测试代码,体验不同继承方式下的成员访问属性。(类设计时可根据需要自行添加数据成员和其他成员函数。) (1) 行车记录仪的芯片可以使用摄像机的摄像、图像质量设定功能。 行车记录仪用户可以操作行车记录仪的操作菜单和摄像机的摄像功能。 (2)行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单。 (3) 行车记录仪的芯片可以使用摄像机的拍摄、图像质量设定功能。 行车记录仪用户仅仅可以操作行车记录仪的操作菜单 同时其他公司购买行车记录仪,因该公司也用于销售,不得泄露其全部内容 课后: (1)采用组合方式设计行车记录仪类,增加相应测试代码,体验继承和组合的关系。 (2)分别为继承和组合方式下为各类添加构造函数、析构函数,增加相应测试代码,体验对象的初始化和构造顺序。 (3)将摄像机类和行车记录仪类功能相近的函数(如拍摄、编码等功能函数)设为同名函数,增加相应测试代码,体验同名函数覆盖。 (4)为我公司建立一个多态的产品类层次结构,使用抽象类,测试时,创建一个基类指针的容器,通过基类指针调用虚函数,体验多态。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值