类哎呀实现CPP

class oop realions cpp

本文关键字:CPP 实现 哎呀      更新时间:2023-10-16

我用C ++开始了一门新的OOP课程,对不起,我的英语不好。

我阅读了一些有关泛化(继承)、聚合和关联的信息。 还是看不懂这个例子:

假设出租车想到一辆汽车,包含像发动机和车轮这样的子类。我想"允许出租车"访问子类的所有字段(或者这就是我认为我想要的,请告诉我是否有更好的方法)

引擎.h:

class Engine{
public:
    Engine(status nstatus, int npower, double nEngineVer) :EngineStatus(nstatus), power(npower), EngineVer(nEngineVer)
    {};
private:
    status EngineStatus;
    int power;
    double EngineVer;
};

出租车:

#include "engine.h"
class Taxi{
public:
    Taxi(int id, int ,km, const Engine &engine) :id(id),km(km),engine(engine){};
    void printMe(){
        cout << id << ' ' << km << ' '<< endl;
    }
private:
    Taxi();     //default Ctor is private! we dont want to create broken Taxi e.g no engine
    int id;
    int km;
    Engine engine;
};

假设如果我使用 printMe,我想打印出租车的全部值,我应该怎么做(允许访问引擎值)

所有答案!

您还可以为引擎类实现所谓的"Getters"。也就是说,当你是一个更有经验的程序员时,访问类属性的最常见方法。

像这样:

class Engine {
public: 
  Engine(status nstatus, int npower, double nEngineVer) 
    : EngineStatus(nstatus), power(npower), EngineVer(nEngineVer) 
  {}
  int getPower() const { return power; }
private: 
   status EngineStatus; 
   int power; 
   double EngineVer;
};

class Taxi {
public: 
  Taxi(int id, int ,km, const Engine &engine) 
    : id(id), km(km), engine(engine)
  {}
  void printMe()
  { 
     cout << engine.getPower() << endl; 
  } 
 private:
   int id;
   int km;
   Engine engine;
};

剩下的你可以一个人做,我不会做你的功课。而且,如果您创建了自定义构造函数,则无需将默认构造函数设置为私有,只需不要声明它即可。

如果你只想打印Engine值,你可以用Engine编写一个函数来做到这一点:

class Engine {
    // ...
    void printMe(){
        cout << EngineStatus << ' ' << power << ' ' <<
                EngineVer << endl;
    }
    // ...
};

然后只需从Taxi调用它:

void printMe() {
    cout << id << ' ' << km << ' ';
    engine.printMe();
}

最基本的方法是将引擎变量声明为 public 而不是私有。在这种情况下,您可以从 Taxi 实例直接访问例如 engine.power .