类之间的调用函数

时间:2011-02-21 03:43:47

标签: c++ oop linux class

您好 我有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
    }}

我需要你的帮助我一直在寻找解决这个问题好几天。

3 个答案:

答案 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想要执行依赖b1b2的操作,因此它们是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 ++的好书 - 如果您搜索它们,可以在此处找到列表。