A类需要B类,需要A类及其所有成员

时间:2012-09-05 14:00:38

标签: c++ class recursion include members

我绝对是一个绝望的案例......使用C ++,我已经定义了这两个类:

// Console.hpp
#ifndef CLASS_Console
#define CLASS_Console
#include <iostream>
#include "Window.hpp"

class Console
{
public:
    Window *Win;
    Console(Windows *Win); // Which then does "this->Win = Win;"
    void AppendText(std::string);
    // And some more dozens functions
};
#endif

// Window.hpp
#ifndef CLASS_Window
#define CLASS_Window
#include <iostream>
#include "Size.hpp"

class Window
{
private:
    Console *m_Console;

public:
    Window(); // Which then does "m_Console = new Console(this); m_Console->AppendText("YEAH");"
    Console *getConsole(); // For use by another classes
    Size getSize();
    // And some more Tens and Tens of functions
};
#endif

首先,人们会说:“使用前瞻声明!”

但是鉴于我需要访问这些功能中的一些(在一种方式和另一种方式中),有什么办法可以避免使用前向声明吗?

感谢您(未来)的答案!

4 个答案:

答案 0 :(得分:5)

  

但是鉴于我需要访问这些功能中的一些(在一种方式和另一种方式中),有什么办法可以避免使用前向声明吗?

我不确定你明白前方声明的作用。您只需要在window.hpp中为Console提供一个转发声明,然后在console.hpp中加入window.cpp

答案 1 :(得分:3)

不,没有办法避免(至少是)前方声明。

  

但鉴于我需要访问这些功能中的许多功能

这为什么重要?性能?你有什么测量吗?如果没有,你就不能谈论表现。

答案 2 :(得分:1)

正常结构是:

  1. 声明第一堂课:class Console;
  2. 定义第二个类:class Window { Console *c; ...};
  3. 定义第一个类:class Console { Window *w; ... };
  4. 定义成员函数Console::Console() { ... } ...
  5. 第一个类声明足以让你编写另一个类的定义(没有成员函数的定义)。

    然后在两个类的定义之后,声明了成员函数,因此成员函数的代码可以根据需要使用其他类的成员。

答案 3 :(得分:0)

如果只需要从“外部”设计访问这些类中的一个,您可以考虑在Window内嵌套控制台(或反过来)