使用另一个类的多个实例的类
问题描述:
我想了解如何在类中使用类对象,特别是如何在对象之间传递参数。我试图创建一个示例对象Calc
,它应该提供两种方法Calc.sum
和Calc.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
2申报Plus
多个实例)是术语(评论)是否正确?
答
你的问题就出在这里
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;
它不编译。一定还有其他的错误。对不起,我花了一整天的时间搜索,我可能会很累。 – Combinatix
我发现另一个错误“手动编译”:),请参阅我的编辑。下次请发布编译错误。 “它不编译”是不够的。 –