我遇到了一个简单的C ++问题,但我不知道如何解决这个问题。
我有两个类,A和B,无论如何都没有继承。 A是Client类,B是存储Client(A类)列表的类。
我只希望B实例化并销毁B类,但我希望我的代码的其他部分能够调用A类中的方法。
最初,我有以下内容:
class B {
public:
class A {
public:
void setX(int val);
int getX();
private:
int x;
A();
~A();
};
B()
~B()
....
};
这允许我从B调用A的构造函数/析构函数,并使A的构造函数/析构函数从其余部分变为私有,但是在A上调用setX()和getX()变得很麻烦,因为我必须调用B :: A。 / p>
我认为将A放在它自己的文件中(它是自己的类,而不是嵌套的),因为其他类可以在A上调用方法。但是现在B不能访问A的构造函数/析构函数,因为它是私有的。如果我公开,那么任何人都可以创建A类对象。
我不确定最好的方法是什么。如果A是它自己的类,我怎么能保持构造函数/析构函数只对B请用,而其他类可以从A上调用一个对象的setX()和getX()?
答案 0 :(得分:2)
在自己的非嵌套类中声明A,但是朋友类B应该可以解决问题。
离开你:
class B{
public:
B()
~B()
....
};
和
class A {
friend class B;
public:
void setX(int val);
int getX();
private:
int x;
A();
~A();
};
答案 1 :(得分:0)
我想你可能搞砸了。(或者我在读你的例子时做了!:P)
声明嵌套类使得嵌套类能够访问嵌套类的所有成员,而不是我从解释中理解的反转。
我的意思是:A中的B意味着A访问B的成员,而不是反过来!
Nested Classes Question(Check second response, not first!)
如果在你的问题中说“我只希望B实例化并销毁B类”,那么你的意思是“我只希望B实例化并销毁A类”,那么你有两个选择。
你可以制作B的嵌套类A,让B访问A的私有东西 或者使用朋友班。(查看@Egg回复)