【问题标题】:Class using multiple instance of another class使用另一个类的多个实例的类
【发布时间】:2016-07-31 18:35:00
【问题描述】:

我想学习如何在类中使用类对象,尤其是如何在对象之间传递参数。我正在尝试创建一个示例对象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) 术语(cmets)对吗?

【问题讨论】:

    标签: c++ class object arduino


    【解决方案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;
    

    【讨论】:

    • 无法编译。一定有其他问题。抱歉,我花了一整天的时间在谷歌上搜索解决方案,我可能累了。
    • 我通过“手动编译”发现了另一个错误:),请参阅我的编辑。下次请发布编译错误。 “它不编译”是不够的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    • 1970-01-01
    • 2013-03-18
    相关资源
    最近更新 更多