class oop realions cpp

时间:2014-11-24 12:22:39

标签: c++ class oop

我用c ++开始了一个新的oop课程,抱歉我的英语不好。

我读了一些关于泛化(继承),聚合和关联的信息。  仍然不明白这个例子:

让我们说出租车想到一辆车,包含像发动机和车轮这样的子类...... 我想“允许出租车”访问子类的所有字段(或者我认为我想要的,请告诉我是否有更好的方法)

engine.h:

class Engine{

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

Taxi.h:

#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我想打印出租车的整个价值, 我应该怎么做(允许访问引擎值)

获得所有答案!

3 个答案:

答案 0 :(得分:0)

如果您只想打印Engine值,可以在Engine中编写一个函数来执行此操作:

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

然后从Taxi

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你也可以实现所谓的&#34; Getters&#34;适用于您的Engine-Class。多数民众赞成,当你是一个更有经验的程序员时,最常见的方法来访问类的属性。

这样的事情:

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;
};

你可以独自完成其他任务我不会做你的功课。 如果您创建了自定义构造函数,则不需要将默认构造函数设置为私有,只是不要声明它。