C++ 在类B中访问类A的函数f,而f需要访问B的成员变量
考虑以下代码:C++ 在类B中访问类A的函数f,而f需要访问B的成员变量,c++,oop,c++11,C++,Oop,C++11,考虑以下代码: class Car { public: bool openCar(); } class LocomotiveEngineer { public: bool carRepair(); private: std::list<int> m_screwdriver; std::vector<int> m_keys; Car myCar; } int main() { LocomotiveEngineer pet
class Car
{
public:
bool openCar();
}
class LocomotiveEngineer
{
public:
bool carRepair();
private:
std::list<int> m_screwdriver;
std::vector<int> m_keys;
Car myCar;
}
int main() {
LocomotiveEngineer peter;
}
在汽车的cpp中,我有如下内容:
Car::openCar()
{
m_keys.size(); //openCar() can access m_keys via an instance of LocomotiveEngineer or whatever
m_screwdriver.empty(); //openCar() can access m_screwdriver via an instance of LocomotiveEngineer or whatever
}
我该如何设计呢?我不断地犯错误。我想我应该使用这样的东西:类转发声明、朋友等等
提前谢谢。
ps:我仅限于c++11只需将汽车作为
朋友添加到MotorveEngineer类:
class LocomotiveEngineer
{
public:
bool carRepair();
private:
std::list<int> m_screwdriver;
std::vector<int> m_keys;
friend class Car;
}
cpp:
#include <vector>
class LocomotiveEngineer; // forward declare
class Car
{
public:
bool openCar(LocomotiveEngineer& repairmen);
}
class LocomotiveEngineer
{
public:
bool carRepair(Car& broken_car); //specify the car whcih needs to be repaired
private:
std::list<int> m_screwdriver;
std::vector<int> m_keys;
friend class Car;
}
bool LocomotiveEngineer::carRepair(Car& broken_car)
{
broken_car.openCar(*this);
return true;
}
bool Car::openCar(LocomotiveEngineer& repairmen){
repairmen.m_keys.size(); //openCar() can access m_keys
repairmen.m_screwdriver.empty(); //openCar() can access m_screwdriver
return true;
}
main*
int main(){
Car brokenCar;
LocomotiveEngineer bob;
bob.carRepair(brokenCar);
return EXIT_SUCCESS;
}
我必须指出,这种方式做的工作不是一个好的设计,而是足够的开始
您不能从carRepair()
调用openCar()
,因为没有对象可以调用它。@Evgeny如果这样做是正确的,那么应该创建一个对象。我已经把事情公开了,这样人们就可以提出如何设计整个系统了。但是,应该由您决定在何处创建它。我猜你对C++中的面向对象编程缺乏充分的理解。即使是关于这个主题的一本简单的书也会对你有很大的帮助。创建一个对象并不能解决这里提出的问题。我对oop做得很好,最明显的解决方案是将钥匙和螺丝刀作为参数传递给openCar
。它不起作用。另一方面,工程师将变量作为静态变量不是一个好主意,他们只能在以后的frameworkIt工作中进行初始化。您需要一个机车工程师的实例来访问其成员。e、 g.myEngineer->m_keys.size()
我正在尝试,但它不起作用。您可以发布为您工作的代码吗?好的,在标题中向前声明MotorveEngineer(类MotorveEngineer;)并更改breaked\u car->openCar(*this)后,它工作了代码>至断车。敞车(*此)代码>在机车工程师::carRepair
int main(){
Car brokenCar;
LocomotiveEngineer bob;
bob.carRepair(brokenCar);
return EXIT_SUCCESS;
}