• 【C++ Primer】两个类相互包含的求解策略


    一,问题描述

            A类包含B类的实例,而B类也包含A类的实例

     

    二,求解策略

     

            1)错误的解法

                   A文件包含B,而B文件又包含A文件,这样就形成死循环

    #include "B.h"
    
    class A
    {
        int i;
        B b;
    };
    
    #include "A.h"
    class B
    {
        int i;
        A   a;
    };
    


             2)正确的写法以及注意事项

                    1)主函数只需要包含b.h 就可以,因为b.h中包含了a.h

                  2)a.h中不需要包含b.h,但要声明class   b。在避免死循环的同时也成功引用了b

                  3)包含class  b 而没有包含头文件 "b.h",这样只能声明  b类型的指针!!!!而不能实例化!!!!

                

     

           a.h:

    #include <iostream>
    using namespace std;
    
    class b;
    
    class a
    {
    public:
    	b *ib;
    	void putA()
    	{
    		cout<<"这是A类"<<endl;
    	}
    
    };


               b.h:

    #include <iostream>
    #include "a.h"
    
    using namespace std;
    class b
    {
    public:
    	a ia;
    	void putB()
    	{
    		cout<<"这是B类"<<endl;
    	}
    
    };


              主函数

    #include <stdio.h>
    #include <tchar.h>
    #include "b.h"
    int _tmain(int argc, _TCHAR* argv[])
    {
        
    	b B;
    	B.putB();
    
    	B.ia.putA();
    
    	
         
    
    	getchar();
    	return 0;
    }


     

     

            

  • 相关阅读:
    bzoj3993: [SDOI2015]星际战争
    bzoj3583: 杰杰的女性朋友 && 4362: Graph
    bzoj2260: 商店购物 && 4349: 最小树形图
    老oj3444 && Pku3241 Object Clustering
    bzoj3754: Tree之最小方差树
    bzoj2215: [Poi2011]Conspiracy
    老oj曼哈顿最小生成树
    bzoj2180: 最小直径生成树
    棋盘问题
    油田 Oil Deposits
  • 原文地址:https://www.cnblogs.com/secbook/p/2654978.html
Copyright © 2020-2023  润新知