C ++类成员变量重新分配

时间:2015-02-25 21:06:02

标签: c++ function class object methods


此计划


我的对象Class有一个成员变量balance,它在初始化过程中设置,并通过方法augment进行操作,该方法被赋予一个加号balance

Class对象嵌套在Class2对象的数组中,该对象只有Class个对象的数组作为其成员。 Class2对象有一种方法可以访问名为Class的{​​{1}}对象,以及一种操作名为getClass的{​​{1}}对象的方法。


Class



问题


如果您按照setObject中的步骤操作,我尝试使用#include <iostream> using namespace std; class Class { double balance; public: Class(); Class(double setBalance); void augment(double amount); double getBalance(); }; class Class2 { Class object2[50]; public: Class getClass(int index){ return object2[index]; }; void setObject(int index, double balance) { Class temp(balance); object2[index]=temp; }; }; Class::Class() { balance = 0; } Class::Class(double setBalance){ balance=setBalance; }; void Class::augment(double amount) { balance+=amount; }; double Class::getBalance() { return balance; }; int main() { Class2 object; object.setObject(5, 546); cout << object.getClass(5).getBalance(); object.getClass(5).augment(546); cout << object.getClass(5).getBalance(); return 0; } 初始化main对象,并通过{{1}操纵Class }} 方法。看起来这个代码应该工作,如果对象是直接访问而不是嵌套在balance中,它确实有效,但这不是一个选项。我认为这与balance中返回augment对象的方式有关,但我无法弄明白。

2 个答案:

答案 0 :(得分:1)

返回对数组中对象的引用

Class & getClass(int index){
    return object2[index];
};

您可以在Class2中定义下标运算符以访问数组的元素。

还要考虑使用类名Class和Class2是个坏主意。

答案 1 :(得分:0)

看起来我有点迟了,但我的两分钱是重载赋值运算符并创建一个复制构造函数,只是为了确保正确复制和分配类。它可能有点老式,但我是遵循三条规则的粉丝。 http://en.wikipedia.org/wiki/Rule_of_three_%28C%2B%2B_programming%29

#include <iostream>
#include <cassert>

class Class1 {
    private:
        double balance;

    public:
        Class1() : balance(0) { };

        Class1(double setBalance) :
            balance(setBalance) { }

        // create a copy constructor
        Class1(const Class1& src) : balance(src.balance) { }

        // destructor that does nothing
        ~Class1() { }

        void augment(double amount) {
            balance += amount;
        }

        double getBalance() { return(balance); }

        // overload the assignment operator for your class
        Class1& operator=(const Class1 &src) {
            balance = src.balance;
            // make sure to return *this which returns a reference to the
            // current class object (in this case, the current Class1)
            return(*this);
        }
};

class Class2 {
    private:
        Class1 object2[50];

    public:
        Class2 () = default;

        Class1 getClass(unsigned index) {
            assert(index < 50);
            return(object2[index]);
        }

        void setObject(int index, double balance) {
            assert(index < 50);
            object2[index] = Class1(balance);
        }
};

int main(int argc, char *argv[]) {
    Class2 object;
    object.setObject(5, 546);
    std::cout << object.getClass(5).getBalance() << std::endl;
}