#define特定翻译单元

时间:2018-10-31 16:36:20

标签: c++

我想问一下是否可以这样做 如果是,该怎么办? 我想这样做是因为我想“更新”一个班级,但是我无权编辑该班级 (B类只是向A类添加了一个变量)

A.h

#pragma once
class A
{
public:
int x;
A();
};

A.cpp

#include "A.h"
A::A():x(0){}

update_to_A.h

#pragma once
#include "A.h"
class B: public A
{
public:
int y;
B();
};

update_to_A.cpp

#include "update_to_A.h"
B::B():y(1){}

写在主体上的像这样

main.cpp(这样写)

#include "A.h"
#include "update_to_A.h"
int main()
{
A object; //variables: x (supposed to be x, y) 
};

但是我希望它像这样

main.cpp(这样操作)

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

1 个答案:

答案 0 :(得分:1)

由于许多原因,这不是一个好主意。为了提高重要性:

  • 阅读令人困惑。为什么A突然表示B

  • 最有可能打破单一责任。 A应该做某件事,因此,希望它突然成为B可能是在做它原本不应该做的事情。

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

  • 在C ++中,如果不诉诸丑陋而危险的技巧,就不可能做到这一点。您可以在#define A Bupdate_to_A.h并从那里开始工作,但我必须强调这是错误的方式。如果尝试这样做,您将遭受痛苦。

让我非常清楚:实现问题中所描述内容的任何方法都是肮脏的。它不易维护,非常脆弱,很可能在解决您真正想要达到的目标之前会引起无法解决的问题。

如果您想在B中加入main,为什么不使用B?为什么要这样滥用A