您好 我有3个班级A,B和C
A类是主要的类,内容也是主要的功能,我将主要的B类和C类称为b1,b2和c1。
在B类中有一个向量(V)有一个int列表。和3个函数添加,获取和删除删除。课堂上所有的东西都是公开的。在C类中,我需要从b。(/ p>)获取(B :: get)的函数
我想要的是我怎样才能使b1的c1调用get来返回b1中的V的值,之后使用b2的添加来在b2的V中添加新项目。 提前致谢
这是一个例子
class a{
int main(){
b b1,b2;
c c1;
b1.add(10);
b1.add(20);
c1.start();
}}
class b{
vector<int> v;
void add(int i){
v.push_back(i)}
int get(){int i=v.at(0); return i;}
}
class c{// take something from b1 and add it to b2
void play(){
int i=b.get();//should take it from b1
b.add(i*2);//should add it to b2
}}
我需要你的帮助我一直在寻找解决这个问题好几天。
答案 0 :(得分:0)
我认为你的问题的答案是给C类一个指向两个不同的b类对象的引用/指针。
然后你可以简单地写
class c{// take something from b1 and add it to b2
void play(){
int i=b1.get();//should take it from b1
b2.add(i*2);//should add it to b2
}}
答案 1 :(得分:0)
C类需要存储对b1和b2的引用。
class c{
public:
c(b& b1, b& b2): m_b1(b1), m_b2(b2) {}
void play(){
int i=m_b1.get();
m_b2.add(i*2);
}
private:
b& m_b1;
b& m_b2;
};
class a{
int main() {
b b1,b2;
c c1(b1, b2);
b1.add(10);
b1.add(20);
b1.play();
}
基本上,当一个对象需要使用另一个对象的功能时(无论它是同一个类的实例还是另一个),你需要该类来获取对象的句柄,即指针或引用
答案 2 :(得分:0)
由于play
想要执行依赖b1
和b2
的操作,因此它们是play
的参数。
像这样:
class c
{
public:
void play(const b& oneB, b& otherB)
{
int i = oneB.get();
otherB.add(i * 2);
}
}
int main()
{
b b1, b2;
c c1;
b1.add(10);
b1.add(20);
c1.play(b1, b2);
}
我们正在传递引用(&
),因为你的词法分析器和标记器很可能具有内部状态,你不想复制它们但使用相同的对象。
请注意,这是C ++,而不是Java,因此main
函数是全局的,而不是某个类的成员函数。
另一种可能性是让其他对象成为c状态的一部分:
class c
{
public:
c(const b& oneB, b& otherB) : m_b1(oneB), m_b2(otherB) {}
void play()
{
int i = m_b1.get();
m_b2.add(i * 2);
}
private:
const b& m_b1;
b& m_b2;
}
int main()
{
b b1, b2;
c c1(b1, b2);
b1.add(10);
b1.add(20);
c1.play();
}
由于您遇到了非常基本的概念问题,我建议您选择一本关于C ++的好书 - 如果您搜索它们,可以在此处找到列表。