【问题标题】:call function between classes类之间调用函数
【发布时间】:2011-07-01 00:50:39
【问题描述】:

你好 我有 3 类 A、B 和 C 类

A类是主类,内容也是主函数,我把主类B和C类分别称为b1、b2和c1。

在 B 类中有一个向量 (V) 具有 int 列表。和3个功能添加,获取和删除删除。课堂上的所有东西都是公开的。

在 C 类中,我有需要从 b 获取 (B::get) 的函数。

我想要的是如何让 c1 调用 b1 的 get 以返回 b1 中 V 的值,然后使用 b2 的 add 在 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
    }}

请我帮助我几天来解决这个问题。

【问题讨论】:

  • 我真的不知道你在问什么。
  • @Pemdas:如何让 2 个类互相调用并在它们之间共享数据
  • 此代码无法编译。我看到至少 2 个不同的语法错误。
  • 您是否偶然从 Java 背景中学习 C++?
  • @abelenky 这是一个示例,只是代码太大,例如 b 类是 600 行。

标签: c++ oop linux class


【解决方案1】:

由于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);
}

我们正在传递引用 (&amp;),因为您的词法分析器和分词器很可能具有内部状态,您不想复制它们而是使用相同的对象。

注意这是 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++ 的好书 - 如果您搜索它们,您可以在 SO 上找到列表。

【讨论】:

    【解决方案2】:

    我认为你的问题的答案是给 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
        }}
    

    【讨论】:

    • 当我尝试编译器显示未声明 b1 和 b2 的错误时,我该怎么做。
    【解决方案3】:

    类 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();
        }
    

    基本上,当一个对象需要使用另一个对象的功能时(不管它是同一个类的实例还是另一个),你需要那个类来获取对象的句柄,即指针或引用.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多