考虑以下代码:
Class A
{
int a;
somepointer* b;
}
Class B : A
{
void func()
}
main()
{
A* a1 = new A();
a1->a = 5;
a1->b = new somepointer();
B* b1 = new B()
}
现在当 B 被创建它包含 A 时,我想重用之前创建的 a1,即 b1->a 应该给出值 5。如何做到这一点?
考虑以下代码:
Class A
{
int a;
somepointer* b;
}
Class B : A
{
void func()
}
main()
{
A* a1 = new A();
a1->a = 5;
a1->b = new somepointer();
B* b1 = new B()
}
现在当 B 被创建它包含 A 时,我想重用之前创建的 a1,即 b1->a 应该给出值 5。如何做到这一点?
每个实例都有自己的变量。您无法a1
从 访问 的成员b1
。
您的代码有很多问题,并且像您这样使用指针的一般方法不适合 C++(它看起来更像 Java)。
我建议你买一本关于 C++ 的好书,然后重新开始。通过反复试验学习 C++ 并不是最好的方法。
我猜你只是提供你想要的原型。所以我会忽略语法问题。
您可以在 B 类中创建一个以 A 类型变量作为参数的构造函数:
class B:A {
public:
B(A *my_a) {
a = my_a->a;
b = my_a->b;
}
void func() {
//......
}
}
main() {
A *a1 = new A();
a1->a = 5;
a1->b = new somepointer();
b = new B(a);
}
你也可以考虑动态转换:C++ cast to derived class。但不幸的是,这不起作用,所以这里最好的方法是有一个构造函数,以便您可以手动设置重用所需的变量。
编辑:由于 Humayara Nazneen 希望改变 a1->b 不会影响 b->b,因此不应将 A::b 声明为指针,这意味着:
class A {
int a;
somepointer b;
}
当您分配 b = my_a->b; 它将按值复制。