C++构造函数继承

标签 c++ inheritance constructor

假设我们有一个基类 Country,它以国家/地区字母作为变量。每个派生类都应该有自己的国家字母。我试过了,但显然行不通:

class Country
{
protected:
    char letter;
    virtual void set_letter(){}
public:
    Country()
    {
        set_letter();
    }
};

class England : public Country
{
    void set_letter()
    {
        letter = 'e';
    }
};

我的想法是,派生类将继承基类的构造函数,基类将调用“set_letter()”方法,每个类都不同。但现在我知道这是不可能的,因为构造函数将从基类而不是派生类调用方法。

另一种选择是写“letter = 'e';”在每个构造函数定义体中。但是如果一个类有很多构造函数呢?我每次都得写。

我希望你明白我在说什么。最好的解决方案是什么?也许是这样的:

class Country
{
protected:
    virtual char letter() const = 0;
    .
    .
    .
};

class England : public Country
{
    static const char let = 'e';
    char letter() const
    {
        return let;
    }
    .
    .
    .
};

是的,它有效。但我想知道有没有一种方法可以在不使“字母”成为一种方法的情况下做到这一点。不要问为什么……谢谢

最佳答案

您可以尝试另一种解决方案:使用模板

template<char LETTER>
class Country
{
private:
    static const char letter = LETTER;

public:
    char get_letter() const { return letter; }
};


class England : public Country<'e'> { ... };
class Spain   : public Country<'s'> { ... };
class France  : public Country<'f'> { ... };
/* etc */

关于C++构造函数继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18938425/

相关文章:

c++ - 通过引用另一个类的构造函数传递对象时出错

c++ - 在 Win32 环境下从 ntdll.dll 调用 Nt 函数,C++

c++ - QRubberBand,如何选择项目??? QT 文档根本没有帮助

c++ - 是否有嵌套枚举类的接口(interface)机制?

java - 了解方法继承

c++ - 在构造函数中实例化对象时的C++类成员作用域

c++ - std::map 迭代器不在 MFC 应用程序中迭代

c++ - 除了用宏,不能用 C++ 表达自己

c++ - 类之间的共享变量 C++

java - 枚举构造函数中的非静态方法引用作为参数