【发布时间】:2021-06-10 02:40:45
【问题描述】:
class A
{
public:
class B
{
public:
int changevar (int b)
{
a = b; // 5 should go in "a"
}
int get()
{
return a;
}
protected:
int a = 0; // value initialized here
};
private:
int usechangedvar(B& hello);
};
int A::usechangedvar(B& hello)
{
int final = hello.get(); // 5 should go in "final"
return final;
}
int main()
{
A::B hi;
hi.changevar(5);
A obj;
obj.usechangedvar(hi);
}
这段代码不会编译,因为它会说我正在尝试访问私有方法。 无论如何,我不确定这样做的正确方法是什么,但最后我想要的是: 在 B 类下有一个受保护的变量,其值由名为“changevar”的公共方法更改。值更改后,我需要将该值存储在名为“usechangedvar”的私有方法内的变量“final”中。
注意:我不想将变量“a”从受保护的内容更改为其他内容。
编辑:我愿意接受 B 类不是嵌套类的建议。我可以把它放在外面意味着 A 和 B 不在彼此之内
已编辑:
#include <stdio.h>
#include <iostream>
#include <stdint.h>
class A
{
public:
class B
{
public:
int changevar (int b) ------------- This method is called by application code(user) and whatever value user gives here should be the changed value
{
a = b; // 5 should go in "a"
}
// int get()
// {
// return a;
// }
protected:
int a = 0; // value initialized here. This could be anything private/protected
};
class C : public class B
{
};
private:
int usechangedvar();
};
int A::usechangedvar()
{
// 5 should come here which was inputted by user.
}
int main()
{
//1) I instantiate class C by doing
A::C objC;
objC.changevar(5);
// Whole purpose is to take 5 from user and then use it eventually in "usechangedvar" method.
}
【问题讨论】:
-
您不能从
main()调用方法usechangedvar(),因为它是私有的。这与B类的任何细节无关,无论其成员是否受保护。因此,要么使usechangedvar()可访问,要么不要在A类之外使用它。 -
C++ 中
A和A::B之间没有特殊关系(您可能来自Java,但情况并非如此)。如果这些课程不是彼此“内部”,而只是免费的A和B,你会怎么做?这么想。你现在有点不清楚你想要什么。您通过引用正确访问了B...但是final(顺便想一个不同的名称)是在方法执行期间创建的,然后被丢弃。它的寿命很短。您需要更好地表达您想要做的事情,这样我们才能帮助您做到。 -
@Aconcagua 不会改变任何事情
-
@Slava 你是说因为方法“usechangedvar”是私有的,所以我不能将B类的引用作为该方法的参数? --usechangedvar(B& hello) 为了解决这个问题,我必须把这个方法公开?
-
@Slava 啊,确实,错过了
usechangedvar甚至没有使用受保护的成员......
标签: c++ object-oriented-analysis