关键字default

1.default常用于接口中,从它的中文意思行来看,大概能猜个差不多,我们本来写Java接口的时候,是不能有方法体的,JDK1.8之后default关键字在接口中修饰方法时,方法可以有方法体,
2.被defalut修饰的方法只能用于接口中
这里写图片描述
3.运行结果符合Java多态的特性,default关键字可以让接口中的方法可以有默认的函数体,当一个类实现这个接口时,可以不用去实现这个方法,当然,这个类若实现这个方法,就等于子类覆盖了这个方法,最终运行结果符合Java多态特性。

### C++ 中 `default` 关键字的功能与使用场景 #### 1. 基本功能 `default` 关键字用于显式请求编译器为类生成特定的默认成员函数。这些函数通常包括默认构造函数、复制构造函数、移动构造函数、赋值运算符以及析构函数等[^2]。 通过使用 `default`,程序员能够更清晰地表达意图,同时增强代码的可读性可维护性。它允许开发人员控制哪些特殊成员函数由编译器自动生成,并确保它们的行为符合预期。 --- #### 2. 使用场景 ##### (1) 显式定义默认构造函数 即使类没有任何数据成员或基类,也可以通过 `= default` 来显式声明默认构造函数。这种做法提高了代码的透明度,使其他开发者更容易理解该类的设计意图。 ```cpp class MyClass { public: MyClass() = default; // 请求编译器生成默认构造函数 }; ``` ##### (2) 定义复制/移动操作 对于需要支持深拷贝或其他复杂逻辑的类,可以通过 `= default` 让编译器生成浅拷贝版本的复制构造函数赋值运算符。这种方式适用于简单类型的对象管理。 ```cpp class ResourceHolder { public: ResourceHolder(const ResourceHolder& other) = default; // 复制构造函数 ResourceHolder(ResourceHolder&& other) = default; // 移动构造函数 ResourceHolder& operator=(const ResourceHolder& other) = default; // 赋值运算符 }; ``` ##### (3) 配合 `deleted` 禁用不必要函数 当希望禁用某些操作时,可以结合 `delete` `default` 进行精细化设计。例如,在不可拷贝的对象中仅保留移动语义。 ```cpp class NonCopyableButMovable { public: NonCopyableButMovable(const NonCopyableButMovable&) = delete; NonCopyableButMovable& operator=(const NonCopyableButMovable&) = delete; NonCopyableButMovable(NonCopyableButMovable&&) = default; NonCopyableButMovable& operator=(NonCopyableButMovable&&) = default; }; ``` ##### (4) 继承中的应用 在派生类中重新定义并标记为 `default` 的情况下,可以覆盖基类的相关行为,从而实现一致性的继承结构。 ```cpp class Base { public: virtual ~Base() = default; }; class Derived : public Base { public: ~Derived() override = default; // 派生类中重新定义析构函数 }; ``` --- #### 3. 示例代码 下面是一个综合示例,展示如何利用 `default` 减少冗余代码: ```cpp #include <iostream> #include <string> class Person { private: std::string name; int age; public: // 默认构造函数 Person() = default; // 参数化构造函数 explicit Person(std::string n, int a) : name(std::move(n)), age(a) {} // 复制构造函数 Person(const Person& other) = default; // 移动构造函数 Person(Person&& other) noexcept = default; // 赋值运算符 Person& operator=(const Person& other) = default; // 析构函数 ~Person() = default; void display() const { std::cout << "Name: " << name << ", Age: " << age << '\n'; } }; int main() { Person p1("Alice", 30); p1.display(); Person p2(p1); // 调用复制构造函数 p2.display(); Person p3(std::move(p1)); // 调用移动构造函数 p3.display(); } ``` 上述代码展示了如何通过 `default` 自动生成必要的特殊成员函数,简化了类的实现过程。 --- #### 4. 总结 `default` 是一种强大的工具,能够在现代 C++ 开发中显著提升效率代码质量。它的主要作用在于明确指示编译器生成所需的默认函数,避免手动编写重复代码的同时增强了程序的健壮性[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值