【C++11】defaulted关键字

C++ defaulted 学习笔记

1. 简介

  • 作用:defaulted 关键字用于声明编译器生成的默认函数,如默认构造函数、拷贝构造函数、赋值运算符等。
  • 优势:通过使用 defaulted 关键字,可以明确指示编译器生成默认函数,减少了重复的代码编写。
  • 发展历程:C++11 引入了 defaulted 关键字,用于替代传统的手动定义默认函数的方式。

示例代码

#include <iostream>

class MyClass {
public:
    // 默认构造函数
    MyClass() = default;

    // 拷贝构造函数
    MyClass(const MyClass&) = default;

    // 赋值运算符
    MyClass& operator=(const MyClass&) = default;

    // 析构函数
    ~MyClass() = default;
};

int main() {
    MyClass obj; // 调用默认构造函数
    MyClass obj2 = obj; // 调用默认拷贝构造函数

    return 0;
}

2. 应用场景

  • 默认函数:用于声明默认构造函数、拷贝构造函数、赋值运算符等。
  • 删除函数:结合 deleted 关键字,可以用于删除特定的函数,禁止其使用。
  • 覆盖:在派生类中,用于覆盖基类中的默认函数,可以明确指示编译器生成默认函数。

示例代码

#include <iostream>

class Base {
public:
    // 默认析构函数
    virtual ~Base() = default;
};

class Derived : public Base {
public:
    // 覆盖默认析构函数
    ~Derived() override = default;
};

int main() {
    Base* ptr = new Derived(); // 动态分配 Derived 对象
    delete ptr; // 调用默认析构函数

    return 0;
}

3. 使用技巧

  • 结合 deleted 关键字:结合 deleted 关键字,可以实现删除函数的效果,禁止某些函数的使用。
  • 继承关系:在继承关系中,可以通过 defaulted 关键字明确默认函数的生成,提高了代码的清晰度。
  • 与自定义函数结合:可以与自定义函数结合使用,例如自定义析构函数等。

示例代码

#include <iostream>

class NoCopy {
public:
    // 禁止拷贝构造函数
    NoCopy(const NoCopy&) = delete;

    // 禁止赋值运算符
    NoCopy& operator=(const NoCopy&) = delete;
};

int main() {
    NoCopy obj1;
    NoCopy obj2 = obj1; // 编译错误,禁止拷贝构造函数

    return 0;
}

4. 实战案例分析

  • 默认函数的应用:在类中使用 defaulted 关键字声明默认函数,减少重复的代码。
  • 删除函数的应用:结合 deleted 关键字,禁止某些函数的使用,提高代码的安全性。
  • 覆盖默认函数:在派生类中使用 defaulted 关键字覆盖基类中的默认函数,保持继承关系的一致性。

通过学习 defaulted 关键字,可以更好地管理类中的默认函数,提高代码的可读性和可维护性。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值