试图在我的初始化列表中使用虚函数

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

我正在尝试使用必须初始化的const成员创建基类和派生类:

class baseClan
{
public:
    baseClan(const string firstName)
    :
    fullName(createFullName(firstName))
    {}
private:
    const string lastName = "Smith";
    const string fullName;
    virtual const string createFullName(string firstName) { return firstName + " " + lastName ; }
}

我如何实现派生类,以便它可以使用不同实现的createFullName?我在看这个链接https://isocpp.org/wiki/faq/strange-inheritance#calling-virtuals-from-ctor-idiom但是,似乎我陷入了困境和困境:它提出的第一种方法(使用init)不适用于初始化列表;而在第二种方法中,明确指出它无法处理需要访问在Derived中声明的实例数据的情况。

c++ inheritance derived-class dynamic-binding
1个回答
0
投票
从构造函数或析构函数调用虚拟函数是危险的,应尽可能避免。所有C ++实现都应调用在当前构造函数中层次结构级别定义的函数的版本。
© www.soinside.com 2019 - 2024. All rights reserved.