区分:派生类指定基类构造函数、继承构造、委托构造

  • 普通的和委托的区别是:同一个类,多个类之间【派生类-基类】
  • 普通的和继承构造的区别:是否要手动指明
// 1. 派生类显示调用基类构造函数初始化
class A {
public:
    A(int x, int y) {
        std::cout << "A(x, y) called" << std::endl;
    }
};

class B : public A {
public:
    B(int a, int b, int c) : A(a, b) {   // 手动调用A的构造函数
        std::cout << "B(a, b, c) called" << std::endl;
    }
};

int main() {
    B obj(1, 2, 3); 
}

// 特点:手动指定基类的构造函数,不能自动继承构造。

// 2. C++11, 使用using自动继承基类的构造函数
class A {
public:
    A(int x, int y) { }
};

class B : public A {
public:
    using A::A;   // 继承基类A的构造函数
};

int main() {
    B obj(1, 2);  // 直接使用A的构造函数
}

// 特点:自动继承构造函数,不需要显式初始化基类。

// 3. C++11, 委托构造:在同一个类中,一个构造函数调用另一个构造函数
class A {
    int m_a, m_b;
public:
    A(int x, int y) : m_a(x), m_b(y) {
        cout << "A(int, int)" << endl;
    }
    
    // 委托构造:委托给 A(int, int) 进行初始化
    A(int x, int y, const string& str) : A(x, y) {
        cout << "str = " << str << endl;
    }
};

// 特点:同类中不同构造函数之间的复用,适合代码共享。
posted @   itsinsane  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示