在面向对象编程中,继承允许类继承其基类的属性和方法。这一强大的功能可实现代码重用和可维护性。然而,处理继承类中的构造函数和赋值运算符可能具有挑战性。
考虑一个具有一组构造函数和一个赋值运算符的类 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中文网其他相关文章!