C ++如何使派生类自动采用基类参数

问题描述 投票:0回答:1

[当我在基类中更改值,然后稍后创建子类的对象时,该子类将使用空参数而不是更改后的值创建。有没有一种方法可以使用基类的参数来派生类的对象?

示例:

Base.h

class Base
{

class Child;

public:
    int number = 0;
    Child *chilObject;

    void Setup()
    {
         number = 5;
         childObject = new Child;
    }
};

Child.h

class Child :
    public Base
    {

    };

main

int main()
{
    Base base;   
    base.Setup();

    cout << base.number << " : " << base->chilObject.number << endl;
    cout <<  << endl;        
}

输出:5:0

我只是问是否有一种方法可以使派生类对象自动获取基类变量。

c++ derived-class
1个回答
0
投票

这是通常在C ++中完成的方式:

#include <iostream>

class Base
{

public:

    int number = 0;

    virtual ~Base() = default;

    void Setup()
    {
        number = 5;
    }
};

class Child : public Base
{
    // number exists here because of inheritance.
};

int main()
{
    // Child object seen as Base object:
    Base* base = new Child;
    base->Setup();

    // Child object seen as Child object:
    Child* child = static_cast< Child* >( base );

    // Both share the same 'number' variable, so:

    std::cout << base->number << " : " << child->number << std::endl;
    std::cout << std::endl;

    // Free memory taken by 'new'.
    delete base;

    return 0;
}

产量:

5 : 5

在真实代码中,您可能会将Setup虚拟化,但不进行强制转换。

© www.soinside.com 2019 - 2024. All rights reserved.