假设我在main中引用了一个类,它接受一个像这样的浮点数:
class SomeClass {
SomeClass(float a) {
}
int someMethodDoingSomethingWith_a() {
// perform something on _a
}
float _a;
}
在我的主要课程中,我将使用浮点值构造这个SomeClass,浮点值将在整个过程中不断变化。
每当我在SomeClass中执行某些方法时,它将使用它的float _a,但我希望它是更新的float(无论它当前在main中)。
你会推荐我做什么,使用指针?请建议我能做些什么。
答案 0 :(得分:3)
以下是Nawaz的不同代码。这是更安全的做法。
class SomeClass {
public:
SomeClass(float a) {
}
int someMethodDoingSomethingWith_a() {
// perform something on _a
}
float get_a()
{
return _a;
}
void set_a(float f)
{
_a=f;
}
private:
float _a;// _a is not reference anymore!!!!!!
}
int main()
{
SomeClass S(5.7);
//Now you can get and set a's value with get_a and set a
S.set_a(7.1);
return 0;
}
为了显示与Nawaz解决方案的不同,让我们考虑以下代码,假设我们在课堂上存储引用为Nawaz。
std::shared_ptr<SomeClass> somefunction()
{
float x =7;
return std::shared_ptr<SomeClass>(new SomeClass(x));
}
此函数将返回指向函数的指针,该函数将引用已从内存中删除的内容。
以下是此类代码的另一个问题:
SomeClass A(25); // A._a is referring to garbage.
答案 1 :(得分:0)
然后将其定义为:
class SomeClass {
SomeClass(float & a) : _a (a) {
}
//....
float & _a;
}
int main()
{
float x;
SomeClass inst(x);
}
现在,如果您更改x
中的main()
,则_a
中的SomeClass
会相应更新。但请注意,此自动更改仅会反映在inst
的{{1}}个实例中。