首页 > 后端开发 > C++ > 如何在 C 的派生类中使用基类构造函数和赋值运算符?

如何在 C 的派生类中使用基类构造函数和赋值运算符?

Patricia Arquette
发布: 2024-11-01 08:33:02
原创
265 人浏览过

How do I use Base Class Constructors and Assignment Operators in Derived Classes in C  ?

在 C 中使用基类构造函数和赋值运算符

在面向对象编程中,继承允许类继承其基类的属性和方法。这一强大的功能可实现代码重用和可维护性。然而,处理继承类中的构造函数和赋值运算符可能具有挑战性。

考虑一个具有一组构造函数和一个赋值运算符的类 B。目标是创建一个继承类 D,它重写 foo() 但保留 B 的构造函数和赋值运算符。

显式调用

实现此目的的一种方法是显式调用构造函数和赋值运算符这涉及到在创建 D 实例时手动调用适当的基类构造函数,并使用 Base::operator=() 在赋值运算符中赋值。

<code class="cpp">class Base {
  // ...
public:
  Base(const Base&) { /*...*/ }
  Base& operator=(const Base&) { /*...*/ }
};

class Derived : public Base {
  int additional_;
public:
  Derived(const Derived& d)
    : Base(d) // dispatch to base copy constructor
    , additional_(d.additional_)
  {
  }

  Derived& operator=(const Derived& d)
  {
    Base::operator=(d);
    additional_ = d.additional_;
    return *this;
  }
};</code>
登录后复制

隐式用法

有趣的是,即使没有显式定义构造函数和赋值运算符,编译器也可以自动生成它们。对于具有直接继承和最少自定义的类来说就是这种情况。

<code class="cpp">class ImplicitBase { 
  int value_; 
  // No operator=() defined
};

class Derived : public ImplicitBase {
  const char* name_;
public:
  Derived& operator=(const Derived& d)
  {
    ImplicitBase::operator=(d); // Call compiler generated operator=
    name_ = strdup(d.name_);
    return *this;
  }
};  </code>
登录后复制

因此,当从提供一组全面的构造函数和赋值运算符的基类继承时,可以在派生类无需重写它们,只要这些函数中不需要附加功能即可。

以上是如何在 C 的派生类中使用基类构造函数和赋值运算符?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板