构造函数不是不能继承吗,为什么创建对象C调用了其基类A的构造函数?
空类包含 无参构造,析构,拷贝构造,赋值操作符重载
class Ex
{
};
等价于
class Ex
{
public:
Ex() = default;
~Ex() = default;
Ex(const Ex & rhs) = default;
Ex & operator=(const Ex & rhs) = default;
}
构造函数会首先调用基类的构造
这不是继承的,而是子类在调用构造函数初始化,会首先调用父类的构造函数进行初始化,然后再继续执行子类的构造函数
这里因为是无参的构造函数,所以调用父类构造函数的操作,可以省略不写
给猫取一个名字, 需要设置Name变量, 所以需要自己定义构造函数.
#include <string>
class Cat
{
public:
Cat(){Name=L"无名";}
Cat(std::wstring name){Name=name;}
std::wstring Shout()
{
return std::wstring(L"我的名字叫")+Name+std::wstring(L" 喵~");
}
protected:
private:
std::wstring Name;
};
回答:
对于C++中构造函数继承的疑问,可以说构造函数本身是不继承的,但是在派生类的构造函数中可以显式调用基类的构造函数,这样就可以实现子类中调用父类构造函数的目的。具体可以按照以下步骤实现:
class Base {
public:
Base(int a) { /* 构造函数实现 */ }
};
class Derived : public Base {
public:
Derived(int a, int b) : Base(a) { /* 构造函数实现 */ }
};
在派生类Derived的构造函数中,可以使用Base(a)来初始化基类的对象。
以上是实现子类调用父类构造函数的方法,通过显式调用基类的构造函数来初始化基类对象。