如何将私有整数从A类传递到C 类B类的另一个INT变量



基本上,我有两个类,"汽车"one_answers"电动机"。"汽车"具有SETMOTOR,当电动机已经可用时,应该接收电机对象,并通过对电动机具有的每个PS说" brum"来继承电动机的功率并输出其功率。如果" PowerOformotor"为3,则在调用移动功能时,汽车必须制作" brumbrum"。

我正在使用CodeBlocks,因此代码样本分为标题,CPP文件和主文件。

标题:

car.h

class Car:
{
public:

    void setMotor(Motor m);
    void move();
    Car();
private:    
    int powerofcar = 0;
};

Motor.h

class Motor{
friend class Car;
public:
    Motor();
    Motor(int p); //assign the power -> Motor(3) has 3 PS
private:
    int powerofmotor = 0;
}

CPP文件:

car.cpp

Car::Car(){
}
void Car::setMotor(Motor m){
powerofcar = m.powerofmotor;

}
void Car::move(){

if(powerofcar != 0){
    for(int i = 0; i < powerofcar; i++){
        cout << "Brum";
    }
cout << endl;
}

else {
    cout << "i move without a motor" << endl;
}
}

Motor.cpp

using namespace std;

Motor::Motor(){
}

Motor::Motor(int p){
powerofmotor = p;
}

main.cpp

int main()
{
Motor* m1 = new Motor(3);
Car *c1 = new Car;
c1 -> setMotor(m1); // <--- doesnt work "converation error"
c1 -> move();
}

使用下面的代码我获得"错误:从'电机*'到'int'的无效对话 [-fpermissive]"

如果我键入" c1-> setMotor(*m1(,那么我会得到"我在没有电动机的情况下移动",因此基本上调用了其他语句。

预期的输出应为" brumbrum",因为在我为其分配3PS的电动机后,汽车应具有3PS。

由于我心情愉快,我会给你一些基础:

class Motor
{
  public:
    Motor(int power)
    : m_power(power)
    { ; }
    Motor() : m_power(0) { }
    int get_power()
    { return m_power;}
  private:
    int m_power;
};
class Car
{
  public:  
    Car()
    { ; }
    Car(Motor& m)
    : m_motor(m)
    { ; }
    get_power()
    {
      return m_motor.get_power();
    }
  private:
    Motor m_motor;
};

在上面的示例中,Car可以使用A default Motor构建,也可以使用您选择的Motor构造Car

int main()
{
  Car ford_edge;  // Car with default motor.
  Motor v16(16);  // Create a v-16 motor.
  Car muscle_car(v16);  // Create a muscle car with a v16 motor.
  cout <<  "Muscle car has power of: "
       <<  muscle_car.get_power() << "n";
  return 0;
}

您将指针传递给电动机(Motor*(在期望值类型时函数void setMotor(Motor m);(Motor(。

将主要功能中的Motor* m1 = new Motor(3);更改为Motor m1(3);


如果仅出于某种原因需要通过指针传递指针,则将c1->setMotor(m1);更改为c1-> setMotor(*m1);,但这将创建对象的副本,因为您不使用参考或将void setMotor(Motor m);的签名更改为void setMotor(Motor* m);。>

void Car::setMotor(Motor * m) {
    powerofcar = m->powerofmotor;
}

最新更新