gpt4 book ai didi

c++ - 使用另一个类的多个实例的类

转载 作者:行者123 更新时间:2023-11-28 05:34:17 25 4
gpt4 key购买 nike

我想学习如何在类中使用类对象,尤其是如何在对象之间传递参数。我正在尝试创建一个示例对象 Calc,它应该提供两种方法 Calc.sumCalc.sub。它应该使用另一个对象 Plus 作为数学引擎。 Plus.add 函数编译并运行良好。但是我不知道如何在calc 中启动plus 的多个实例。代码:

class Plus{                     // This class works well
public:
Plus(int); // Structure
int add(int); // Public method (function)
int myVar; // Public property. Just to hold a value.
private:
int _init; // Class-level private variable
};

Plus::Plus(int init){ // Constructor
_init = init;
}

int Plus::add(int p){ // Method add
return _init + p;
}

/***************************************************************************/

class Calc{
public:
Calc(int); // Structure
int sum(int); // Method sum
int sub(int); // Method sub
int myVar; // Public property
private:
Plus positive(int); // Class-level private object definition ?
Plus negative(int); // This is probably wrong ??
};

Calc::Calc(int init){ // Constructor (also wrong...)
Plus positive(init); // Create object "positive" and pass the initial value
Plus negative(-init); // Create object "negative" and pass the initial value
}

int Calc::sum(int n){
return positive.add(n);
}

int Calc::sub(int n){
return negative.add(n);
}

/***************************************************************************/

Plus two(2); // Create class object two
Calc five(5); // Create class object five

void setup(){
Serial.begin(115200);

Serial.print("two.add(3) = ");
Serial.println(two.add(3)); // Calling instance of class Plus
two.myVar = 100;
Serial.println(two.myVar);

Serial.print("five.sum(3) = ");
Serial.println(five.sum(3)); // Calling instance of class Calc

Serial.print("five.sub(3) = ");
Serial.println(five.sub(3)); // Calling instance of class Calc
}

void loop(){}

我的例子是受这篇文章的启发:http://arduinoetcetera.blogspot.cz/2011/01/classes-within-classes-initialiser.html但是那里的代码只有一个实例

1) 如何在 Calc 中声明 Plus 的多个实例

2)术语(评论)是否正确?

最佳答案

你的问题出在这里

Calc::Calc(int init){           // Constructor (also wrong...)
Plus positive(init); // Create object "positive" and pass the initial value
Plus negative(-init); // Create object "negative" and pass the initial value
}

通过这样做,您正在创建与您的成员同名的局部变量:它没有任何效果。

应该是

Calc::Calc(int init): positive(init),negative(-init)
{
}

即使您的成员没有默认构造函数,您也可以通过这种方式初始化您的成员。

哦,这在 Calc 的定义中也是错误的

    Plus positive(int);     // Class-level private object definition ?
Plus negative(int); // This is probably wrong ??

替换为

    Plus positive;     // Class-level private object definition
Plus negative;

关于c++ - 使用另一个类的多个实例的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38687207/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com