C ++-是否可以使用没有继承的另一个类的方法?

时间:2019-09-18 20:57:55

标签: c++ class

我在C ++方面还算不错,但是我希望这个问题有意义:

在以下情况下,B类中的方法可以调用A类中的方法吗?

  • B不能从A继承
  • 您不能在B内创建A的对象
  • A中的方法不能是静态的

例如,可以通过引用B的方法调用传递A的对象来完成此操作。

我的下一个问题是,如果在A的对象内创建B的对象,该怎么办?A如何引用自身传递给对象B的方法?

我正在想象的例子:

class A;

class B
{
    int x = 10;
    int y = 10;
public:
    DoThis(A* obj);
};

B::DoThis(A* obj)
{
    obj->DoThat(int x, int y);
}
class A
{
public:
    DoSomething();
    DoThat(int x, int y);
};

A::DoSomething()
{
    B objB;
    objB.DoThis(this);
}

A::DoThat(int x, int y)
{
   std::cout << x << y;
}
int main()
{
    A* objA = new A;
    objA->DoSomething();

}

1 个答案:

答案 0 :(得分:1)

唯一的问题是您的代码包含许多基本错误,例如声明中缺少类型说明符,缺少终止分号,错误的顺序(在声明之前使用类A),调用和调用之间的不匹配声明等。

这是一个修复问题的修补程序。我还在输出的两个数字之间加上了一个,(逗号空格)和一个换行符终止。

--- dothis-ORIG.cc  2019-09-18 14:13:15.002235916 -0700
+++ dothis.cc   2019-09-18 14:16:56.548099037 -0700
@@ -1,32 +1,36 @@
+#include <iostream>
+
+class A;
+
 class B
 {
-    x = 10;
-    y = 10;
+    int x = 10;
+    int y = 10;
 public:
-    DoThis(A* obj);
-}
-
-B::DoThis(A* obj)
-{
-    obj->DoThat(x, y)
-}
+    void DoThis(A* obj);
+};

 class A
 {
 public:
-    DoSomething();
-    DoThat();
+    void DoSomething();
+    void DoThat(int x, int y);
+};
+
+void B::DoThis(A* obj)
+{
+    obj->DoThat(x, y);
 }

-A::DoSomething()
+void A::DoSomething()
 {
     B objB;
     objB.DoThis(this);
 }

-A::DoThat(x, y)
+void A::DoThat(int x, int y)
 {
-   std::cout << x << y;
+   std::cout << x << ", " << y << std::endl;
 }

 int main()