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

时间:2019-07-06 16:09:37

标签: c++ class inheritance parameter-passing

基本上,我有2个班级,“汽车”和“汽车”。 “汽车”具有setMotor,当已经有电动机可用时,该setMotor应该接收电动机对象,并继承电动机的功率并通过为电动机具有的每个PS说“ brum”来输出其功率。如果“ powerofmotor”为3,则在调用move函数时,汽车必须制作“ brumbrumbrum”。

我正在使用代码块,因此代码示例分为标头,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();
}

使用下面的代码,我得到“错误:从'Motor *'到'int'的无效对话  [-fpermissive]“

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

预期输出应为“ BrumBrumBrum”,因为在我为其分配了3PS的电动机之后,汽车应具有3PS。

2 个答案:

答案 0 :(得分:2)

您正在将指向Motor(Motor*)的指针传递给函数void setMotor(Motor m);,当它期望值类型为{Motor)时。

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


如果仅出于某种原因需要传递指针,则可以将c1->setMotor(m1);更改为c1-> setMotor(*m1);,但这将创建对象的副本,因为您没有使用引用或更改了{{ 1}}到void setMotor(Motor m);,如下所示。

void setMotor(Motor* m);

答案 1 :(得分:2)

因为我心情愉快,所以我会给你一些基础:

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

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

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