gpt4 book ai didi

c++ - 三法则与继承

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:57 25 4
gpt4 key购买 nike

class A 定义了复制运算符、析构函数和 operator=。 ( Rule of Three )

如果 B 继承自 A:

  • 析构函数会自动调用
  • 我需要链接构造函数
  • operator= ... 我应该为类 B 显式定义它吗?

最佳答案

不,这是不必要的。

如果你仔细阅读三原则,你会注意到没有提到基类,决定完全取决于类的适当属性和行为。

(Check this example on ideone)

#include <iostream>

struct A {
A(): a(0) {}
A& operator=(A const& rhs) { a = rhs.a; return *this; }
int a;
};

struct B: A { B(): b(0) {} int b; };

int main() {
B foo;
foo.a = 1;
foo.b = 2;

B bar;
bar = foo;

std::cout << bar.a << " " << bar.b << "\n";
}

// Output: 1 2

这实际上是封装的真正威力。因为您成功地使用了三的规则,使基类的行为正常,它的派生类不需要知道复制构造函数是否被编译器默认或手动实现(且复杂),对用户(派生类是用户)而言,重要的是复制构造函数执行复制。

三法则提醒我们实现细节以帮助实现正确的语义。与所有实现细节一样,它只对此类的实现者和维护者重要。

关于c++ - 三法则与继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885777/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com