在派生类中重用基类指针

时间:2013-10-29 02:05:02

标签: c++

请考虑以下代码:

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.如何做到这一点?

2 个答案:

答案 0 :(得分:1)

每个实例都有自己的变量。您无法从a1访问b1的成员。

你的代码有很多问题,像你这样使用指针的一般方法不适合C ++(它看起来更像Java)。

我建议你读一本关于C ++的好书并重新开始。通过反复试验学习C ++并不是最好的方法。

答案 1 :(得分:1)

我猜你只提供你想要的原型。所以我会忽略语法问题。

您可以在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;它将按值复制。