类组成和标题问题

时间:2018-01-17 22:43:25

标签: c++

目前,我正在编写一个有趣的项目并面临下一个问题。让我假设我正在创建class Bank,我想定义类LoginControllerDeparture

class Bank{
    class LoginController{
       //some implemantation 
    }
    class Departure{
       //some departure 
    }
}

为避免在Bank内大量声明Bank.h,我想在单独的文件中定义它们

//Bank.h
#include "LoginController.h"
#include "Departure"
class Bank{
  class LoginController;
  class Departure;
  LoginController controller;  
  Departure departure;
  ...
}
//LoginController.h
class Bank; //forward declaration
class Bank::LoginController{
   bool getAccess(Bank::Departure);
}
//Departure.h
//Departure depends on Bank class aswell
class Bank; //forward declartion
class Bank::Departure{...}

这段代码不会用巨大的堆栈跟踪编译。它可以用一个大的Bank.cpp解决并在那里写出来,但是,我不想制作一个大文件。 我认为这是一个糟糕的设计问题,但是,如果我可以按照自己的意愿实现这个类,我仍然感兴趣。即使我在LoginController && Departure内定义Bank结构我想要每个都有单独的cpp文件但是,在将包含到cpp文件之一之后,标题保护将关闭对它的访问。我能看到的最佳解决方案是在一个标题中定义所有标题但不在彼此内部。

还有一个问题。是否可以定义1个头文件,所有包含类似

#ifndef HeaderFile
#define HeaderFile
  #include <iostream>
  #include <memory>
  ....
#endif

从上一个问题,我知道这只会打开一个文件,因此我们需要为每个文件提供所需的标题。在不同文件中包含相同的标题似乎很昂贵。

1 个答案:

答案 0 :(得分:2)

您可以将#include指令放在Bank类中。

Bank.h

class Bank {
    #include "LoginController.h"
    #include "Departure.h"
    // Bank implementation
}

LoginController.h

class LoginController {
    // some implementation
}

Departure.h

class Departure {
    // some implementation
}