访问仅在父级的 cpp 文件中的类

Access to class which is only in cpp file of parent

本文关键字:cpp 文件 访问      更新时间:2023-10-16

我想调用一个只在父源类文件的文件中的类。实际上,我在 3 个文件中有 4 个类:

parent.h 
parent.cpp 
child.h
child.cpp

"主要"类是ChildParent。类Otherclass位于 Parent 类定义上方的 parent.h 文件中。

如何访问仅在父.cpp文件中的类Otherclass 在子文件中.cpp?

(不幸的是,我不允许对父文件进行重大更改。

家长.cpp:

using ParentNamespace::Parent;

namespace other
{
    class Otherclass
    {
    public:
        Otherclass()
        {
            // do something
        }
        ~Otherclass()
        {
        }
    };
}

Parent::Parent()...
...
// here the Parent class continues normal

儿童.cpp:

#include "parent.h"
Child::Child() :
ParentNamespace::Parent()
...
...
...
    // here I want to use Otherclass

我怎样才能获得仅在父文件中的类"其他类".cpp.cpp

的访问?

你不能。这就是头文件的全部用途。使用它们。

(不幸的是,我不允许在父文件中进行重大更改。

要么现有代码完全损坏,您应该使用此事实来允许...

或者这些是你不应该尝试以这种方式使用的内部类。

您可以随时为 OtherClass 创建一个单独的头文件,将OtherClass定义(您通常会输出到标头中的所有代码,而不是非内联函数的代码)复制到那里并将此标头#includechild.h 中。对同一类有多个定义并不是很糟糕,只要您绝对确定它们是相同的。这也是一种正确的方法,但是如果您无法将OtherClass定义移动到(某些)头文件,则可以将其复制到新的头文件中。

当然,要问的第一个问题是为什么所有现有代码都是以这种方式完成的。也许OtherClass只是Parent的实现细节,这些细节可能会在未来的开发中发生变化,并且您不应该使用。

一个示例代码(不完全适合您的情况,但说明了如何在没有任何头文件的情况下工作):

// a.cpp
#include <iostream>
class A{
 public:
   int x;
   A(int);
};
class B {
 public:
   int y;
   B(int);
};
A::A(int v) {
   std::cout << "A::A " << v << std::endl;
}
// b.cpp
#include <iostream>
class A{
public:
   int x;
   A(int);
};
class B {
public:
   int y;
   B(int);
};
B::B(int v) {
   std::cout << "B::B " << v << std::endl;
   A a(v+10);
}
// main.cpp
class A{
public:
   int x;
   A(int);
};
class B {
public:
   int y;
   B(int);
};
int main() {
   A a(10);
   B b(20);
}

按预期构建和工作。但是,保持所有定义相同确实很困难,因此这就是标头的用途。