zoukankan      html  css  js  c++  java
  • C++中两个类相互包含引用的相关问题

    在构造自己的类时,可能会遇到两个类相互引用的问题。

    例如:

    class A

    {

      int i;

      B b;

    };

     

    class B

    {

      int i;

      A a;

    };

    在这种情况下,这样就会出现一个死循环a.b.a.b.a.b....,一般来说,应避免这种情况。

    如果确实需要的话,一般来说,至少有一方需要定义成指针。

    例如:

    class A

    {

      int i;

      B b;

    };

     

    class B

    {

      int i;

      A* a;

    };

    如果按照以上的方式,既然存在互相引用,就必须互相包含头文件,如果仅仅是在自己的头文件中包含另外一个头文件,这样是没法编译通过的。怎样解决这个问题呢?

    一般的做法是:两个类的头文件中,选择一个包含另外一个头文件。而另外一个头文件中只能以class *的形式声明,而在类的实现文件中包含头文件。

    具体为:

    //A.h

    #include "B.h"

    class A

    {

      int i;

      B b;

    };

     

    //B.h

    class A;

    class B

    {

      int i;

      A* a;

    };

     

    //B.cpp

    //在B.cpp中的文件包含处要有下面语句,否则不能调用成员a的任何内容
    #include "A.h"
    B::B()//c++中,构造函数如果被重写,默认的构造函数就没了
    {
    ……
    }

  • 相关阅读:
    (14) go 结构体
    (13) go map
    (12) go make初始化
    (11)go 数组和切片
    (10) go 错误
    (9) go 时间日期
    (8)go 字符串
    (7) go 函数
    (6) go 流程控制
    (5) go 格式化输入输出 类型转换
  • 原文地址:https://www.cnblogs.com/nafio/p/9137695.html
Copyright © 2011-2022 走看看