C++ #从另一个单位定义特定的翻译单位

C++ #从另一个单位定义特定的翻译单位,c++,C++,我想问一下是否有可能做到这一点 如果是,怎么做? 我想这样做是因为我想“更新”一个类,但我没有编辑该类的权限 (B类只是向a类添加一个变量) A.h A.cpp 将_更新为_A.h #pragma once #include "A.h" class B: public A { public: int y; B(); }; 将_更新为_A.cpp #include "update_to_A.h" B::B():y(1){} 主要写的是这样的 #include "A.h" #include "u

我想问一下是否有可能做到这一点 如果是,怎么做? 我想这样做是因为我想“更新”一个类,但我没有编辑该类的权限 (B类只是向a类添加一个变量)

A.h

A.cpp

将_更新为_A.h

#pragma once
#include "A.h"
class B: public A
{
public:
int y;
B();
};
将_更新为_A.cpp

#include "update_to_A.h"
B::B():y(1){}
主要写的是这样的

#include "A.h"
#include "update_to_A.h"
int main()
{
B object; //variables: x, y
};
main.cpp(这样写)

但我希望它像这样

#include "A.h"
#include "update_to_A.h"
int main()
{
B object; //variables: x, y
};
main.cpp(这样做)


这不是一个好主意,原因很多。按重要性增加的顺序:

  • 读起来令人困惑。为什么
    A
    突然意味着
    B

  • 它很可能会打破单一的责任
    A
    应该做一件特定的事情,所以想要它突然成为A
    B
    可能会让它做一些原本不应该做的事情

  • 如果其他代码也使用
    A
    (旧代码)并希望与您的代码交互,它将不知道这一意义上的变化,这将很快导致问题。例如,每个
    B
    都需要比
    A
    更多的空间,因此不能将它们放在同一个数组中

  • 不可能在C++中使用这个工具,而不诉诸<强>极其丑陋和危险的< /强>技巧。您可以在
    中定义一个B
    并从那里开始工作,但我必须强调这是错误的方法。如果你这样做的话,你将面临痛苦和折磨

让我非常明确地说:你以任何方式实现你在问题中描述的目标都将是一次卑鄙的攻击。它是不可维护的,非常脆弱,很可能会导致无法解决的问题之前,它做任何你想真正实现


如果您想在
中有一个
B
,为什么不使用
B
?为什么这样滥用
A
呢?

类B将类似于类A(这些是简化的名称以保持简单),但它只添加了一个变量。如果有人想使用原始类A,那么他们只是不包括更新到A.h,事情就会像A应该是什么样子。@尽管如此,当你在不同的地方包含不同顺序的头时,你的程序几乎肯定会崩溃。我只想在A中添加一个变量(和一个处理新变量的函数),但是你不能从类之外的某个地方编辑类(你只能从类的大括号中定义东西),所以我得出了这个结论(因为我没有原始类的编辑权限),但是为什么你还需要新类也被称为
a
?如果您希望现有代码(您不会更改)尊重此更改,那么它几乎肯定不会工作。如果只是为了你自己的代码。。。写
B
而不是
A
#include "A.h"
#include "update_to_A.h"
int main()
{
A object; //variables: x (supposed to be x, y) 
};
#include "A.h"
#include "update_to_A.h"
int main()
{
B object; //variables: x, y
};