转载与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;
}
如有帮助,请采纳,谢谢。
你什么都不用写
子类在调用自己的无参构造函数之前,自然会调用基类的无参构造函数