gpt4 book ai didi

C++构造函数继承

转载 作者:行者123 更新时间:2023-11-28 03:09:13 25 4
gpt4 key购买 nike

假设我们有一个基类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com