类组成和标头问题

class composition and header problems

本文关键字:问题      更新时间:2023-10-16

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

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

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

//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解决并在那里写下来,但是,我不想制作一个巨大的文件。 我认为这是一个糟糕的设计问题,但是,如果可以按照我想要的方式实现这个类,我仍然感兴趣。即使我在Bank内部定义了LoginController && Departure结构,我也希望每个类都有单独的 cpp 文件,但是,标头保护将在将其包含在 cpp 文件之一后关闭对它的访问。我能看到的最好的解决方案是在一个标头中定义所有内容,而不是彼此内部。

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

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

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

您可以将#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
}