使用另一个类的多个实例的类

时间:2016-07-31 18:35:00

标签: c++ class object arduino

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

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)如何在Plus

中声明Calc的多个实例

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

1 个答案:

答案 0 :(得分:1)

你的问题就在这里

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;