我想问一下是否可以这样做 如果是,该怎么办? 我想这样做是因为我想“更新”一个班级,但是我无权编辑该班级 (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
};
答案 0 :(得分:1)
由于许多原因,这不是一个好主意。为了提高重要性:
阅读令人困惑。为什么A
突然表示B
?
最有可能打破单一责任。 A
应该做某件事,因此,希望它突然成为B
可能是在做它原本不应该做的事情。
如果其他代码也使用A
(旧代码)并希望与您的代码进行交互,则它不会知道含义的变化,这会很快导致问题。例如,每个B
比A
需要更多的空间,因此您不能将它们放入同一数组中。
在C ++中,如果不诉诸丑陋而危险的技巧,就不可能做到这一点。您可以在#define A B
中update_to_A.h
并从那里开始工作,但我必须强调这是错误的方式。如果尝试这样做,您将遭受痛苦。
让我非常清楚:实现问题中所描述内容的任何方法都是肮脏的。它不易维护,非常脆弱,很可能在解决您真正想要达到的目标之前会引起无法解决的问题。
如果您想在B
中加入main
,为什么不使用B
?为什么要这样滥用A
?