如何从 C++ 中的嵌套 class 调用变量
how to call variable from a nested class in C++
所以我的代码有点像这样
class foo1
{
public:
foo1()
{
a = "text";
}
void getString()
{
return a;
}
private:
string a;
};
class foo2
{
public:
foo2()
{
foo3 boo3;
}
class foo3
{
public:
foo3()
{
foo1 boo1;
}
private:
foo1 boo1;
};
private:
};
int main()
{
foo2 object;
cout << /* ??? */ ;
}
首先,类中的代码结构有没有问题,其次,我应该在注释的地方放什么来显示我在int main(中初始化的foo2对象中的字符串a ) ?
代码有很多问题,我会用代码注释来解释它们
class foo1
{
public:
//use initializer lists to avoid extra copying
foo1() : a("text")
{
}
//change return type from void to a const reference to string
const string & getString()
{
return a;
}
private:
string a;
};
class foo2
{
public:
//use initializer lists to avoid extra copying
foo2() : boo3()
{
}
class foo3
{
public:
//use initializer lists to avoid extra copying
foo3() : boo1()
{
}
//you need a function that will allow access to the private member. Returning a const reference avoids extra copying
const foo1 & boo()
{
return boo1;
}
private:
foo1 boo1;
};
//you need a function that will allow access to the private member
const foo3 & foo()
{
return boo3;
}
//you need to save the foo3 object in the class to be able to use it later
private:
foo3 boo3;
};
int main()
{
foo2 object;
cout << object.foo().boo().getString();
}
现在这是您访问字符串的方式:
cout << object.foo().boo().getString();
\__________/ \___/ \_________/
^ ^ ^---- get the string from the foo1 object
| |---- get the foo1 object from the foo3 object
|---- get the foo3 object stored in "object"
所以我的代码有点像这样
class foo1
{
public:
foo1()
{
a = "text";
}
void getString()
{
return a;
}
private:
string a;
};
class foo2
{
public:
foo2()
{
foo3 boo3;
}
class foo3
{
public:
foo3()
{
foo1 boo1;
}
private:
foo1 boo1;
};
private:
};
int main()
{
foo2 object;
cout << /* ??? */ ;
}
首先,类中的代码结构有没有问题,其次,我应该在注释的地方放什么来显示我在int main(中初始化的foo2对象中的字符串a ) ?
代码有很多问题,我会用代码注释来解释它们
class foo1
{
public:
//use initializer lists to avoid extra copying
foo1() : a("text")
{
}
//change return type from void to a const reference to string
const string & getString()
{
return a;
}
private:
string a;
};
class foo2
{
public:
//use initializer lists to avoid extra copying
foo2() : boo3()
{
}
class foo3
{
public:
//use initializer lists to avoid extra copying
foo3() : boo1()
{
}
//you need a function that will allow access to the private member. Returning a const reference avoids extra copying
const foo1 & boo()
{
return boo1;
}
private:
foo1 boo1;
};
//you need a function that will allow access to the private member
const foo3 & foo()
{
return boo3;
}
//you need to save the foo3 object in the class to be able to use it later
private:
foo3 boo3;
};
int main()
{
foo2 object;
cout << object.foo().boo().getString();
}
现在这是您访问字符串的方式:
cout << object.foo().boo().getString();
\__________/ \___/ \_________/
^ ^ ^---- get the string from the foo1 object
| |---- get the foo1 object from the foo3 object
|---- get the foo3 object stored in "object"