我用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我想打印出租车的整个价值, 我应该怎么做(允许访问引擎值)
获得所有答案!
答案 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;
};
你可以独自完成其他任务我不会做你的功课。 如果您创建了自定义构造函数,则不需要将默认构造函数设置为私有,只是不要声明它。