c++ 关于继承的疑问

转载与https://blog.csdn.net/xiaoguyin_/article/details/79844994

根据转载基础讲解
调用基类的构造函数是写在初始化列表中的……

我想知道子类如何调用基类的无参构造函数,是这个思路不成立,还是我没找到正确写法

目前错误写法

#include <iostream>
#include <string>

class u32stringex : public std::u32string
{
public:
    u32stringex(void);
};

int main(void)
{
    u32stringex text1; 
    // text1 = U"xx";  // 注释打开报错
    std::u32string t;
    t = U"xx";
    return 0;
}

u32stringex::u32stringex(void)
    : std::u32string() // 写法不知是否有误
{
}


这里的=并不是调用构造函数,而是拷贝赋值函数,子类要实现赋值,必须要自己写操作符函数,可以参考https://blog.csdn.net/weixin_50617754/article/details/112689530的第五点

#include <iostream>
#include <string>

class u32stringex : public std::u32string
{
public:
    u32stringex(void);
    u32stringex& operator=(const char32_t* str) {
        std::u32string::operator=(str);
        return *this;
    }
};

u32stringex::u32stringex(void)
    : std::u32string() //这里写不写都可以,不写也会自动调用父类的默认构造函数
{
}

int main(void)
{
    u32stringex text1;
    text1 = U"xx";  // 不再报错
    std::u32string t;
    t = U"xx";
    return 0;
}

要写成构造函数也需要写自己实现构造

#include <iostream>
#include <string>

class u32stringex : public std::u32string
{
public:
    u32stringex(const char32_t* str) :std::u32string(str) {}
    u32stringex(void);
};

u32stringex::u32stringex(void)
    : std::u32string()
{
}

int main(void)
{
    u32stringex text1(U"xx");    //这才是调用构造函数,参数类型可以转换为const char32_t*
    u32stringex text2 = U"xx";//这才是调用构造函数
    std::u32string t;
    t = U"xx";
    return 0;
}

如有帮助,请采纳,谢谢。

你什么都不用写
子类在调用自己的无参构造函数之前,自然会调用基类的无参构造函数