zoukankan      html  css  js  c++  java
  • 温故知新——C++两个相互关联的类

    我们都必须意识到,写程序其实是一个心思要细腻的活~

    一开始,我的代码大概是这个样子的:

    class B;
    
    class A{
    public:
      A()
    {}
      A(int a) : id(a)
    {}
       private:
      B b;   
    };
    
    class B{
     public:
       B()
    {}
      B(int b): num(b)
    {}
    private:
    A a;
    };

    很显然,我没有能够成功编译~我承认,上面的代码我都没有仔细去想,就写出来了~最近烦心事比较多。

    上面的代码,有一个严重的问题是,相互迭代

    如果上面的代码能够成功执行,会发生:

    class A中有一个class B的成员,于是,编译器去初始化B,于是进入B中,发现class B有一个A的成员,于是初始化A。。。就这么无穷无尽的初始化下去

    还好编译器阻止了这一切~


    进一步改进:

    class B;
    
    class A{
    public:
      A()
    {}
      A(int a) : id(a),b(new b())
    {
    
    }
       private:
      B* b;   
    };
    
    class B{
     public:
       B()
    {}
      B(int b): num(b)
    {}
    private:
    A a;
    };

    感觉这样能够解决问题~实际上,你编译上面的代码,会得到:

    ”A(int a) : id(a),b(new b())“ Error: incomplete type is not allowed

    这是什么错误?仔细的回想下代码,我们只声明了class B,没有B的定义。

    知道错在哪里就容易修改了,代码就不上了,简单说一下

    在类的外部new b(),传入指针给A的构造函数,初始化B* b;

  • 相关阅读:
    Android 联系人中使用的常量
    Android 获取联系人Uri
    Android 编辑联系人
    Android 删除联系人
    Android 联系人添加
    Android 联系人查询
    CollectionViewMasonryLayout
    centos7搭建redis
    centos7搭建zookeeper
    排序算法
  • 原文地址:https://www.cnblogs.com/wangpei0522/p/4570503.html
Copyright © 2011-2022 走看看