C++ class 成员变量重新赋值
C++ class member variables reassignment
这个程序
我的对象 Class
有一个成员变量 balance
,它在初始化期间设置并通过方法 augment
进行操作,该方法被赋予一个双精度值以添加到 balance
。
Class
对象嵌套在 Class2
对象的一个数组中,该对象的成员只有 Class
个对象的数组。 Class2
对象有一个访问 Class
对象的方法 getClass
和一个操作 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
中的步骤操作,我正在尝试使用 balance
初始化 Class
对象并通过 [=14] 操作 balance
=] 方法。看起来这段代码应该可以工作,如果直接访问对象而不是嵌套在 Class2
中,它确实可以工作,但这不是一个选项。我认为这与 Class
对象在 Class2
中返回的方式有关,但我无法弄清楚。
Return 引用数组中的对象
Class & getClass(int index){
return object2[index];
};
您可以在 Class2 中定义下标运算符来访问数组的元素。
还要考虑到使用 class 名称 Class 和 Class2.
是个坏主意
看来我有点晚了,但我的两分钱是重载赋值运算符并创建一个复制构造函数,只是为了确保您的 class 被正确复制和分配。这可能有点过时,但我很喜欢遵循三法则。 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;
}
这个程序
我的对象 Class
有一个成员变量 balance
,它在初始化期间设置并通过方法 augment
进行操作,该方法被赋予一个双精度值以添加到 balance
。
Class
对象嵌套在 Class2
对象的一个数组中,该对象的成员只有 Class
个对象的数组。 Class2
对象有一个访问 Class
对象的方法 getClass
和一个操作 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
中的步骤操作,我正在尝试使用 balance
初始化 Class
对象并通过 [=14] 操作 balance
=] 方法。看起来这段代码应该可以工作,如果直接访问对象而不是嵌套在 Class2
中,它确实可以工作,但这不是一个选项。我认为这与 Class
对象在 Class2
中返回的方式有关,但我无法弄清楚。
Return 引用数组中的对象
Class & getClass(int index){
return object2[index];
};
您可以在 Class2 中定义下标运算符来访问数组的元素。
还要考虑到使用 class 名称 Class 和 Class2.
是个坏主意看来我有点晚了,但我的两分钱是重载赋值运算符并创建一个复制构造函数,只是为了确保您的 class 被正确复制和分配。这可能有点过时,但我很喜欢遵循三法则。 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;
}