问题描述
我有一个 B
类,其中包含一组构造函数和一个赋值运算符.
I have a class B
with a set of constructors and an assignment operator.
这是:
class B
{
public:
B();
B(const string& s);
B(const B& b) { (*this) = b; }
B& operator=(const B & b);
private:
virtual void foo();
// and other private member variables and functions
};
我想创建一个继承类D
,它只会覆盖函数foo()
,不需要其他更改.
I want to create an inheriting class D
that will just override the function foo()
, and no other change is required.
但是,我希望 D
具有与 B
相同的构造函数集,包括复制构造函数和赋值运算符:
But, I want D
to have the same set of constructors, including copy constructor and assignment operator as B
:
D(const D& d) { (*this) = d; }
D& operator=(const D& d);
我是否必须在 D
中重写所有这些,或者有没有办法使用 B
的构造函数和运算符?我特别想避免重写赋值运算符,因为它必须访问 B
的所有私有成员变量.
Do I have to rewrite all of them in D
, or is there a way to use B
's constructors and operator? I would especially want to avoid rewriting the assignment operator because it has to access all of B
's private member variables.
推荐答案
您可以显式调用构造函数和赋值运算符:
You can explicitly call constructors and assignment operators:
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;
}
};
有趣的是,即使您没有明确定义这些函数(然后它使用编译器生成的函数),它也能工作.
The interesting thing is that this works even if you didn't explicitly define these functions (it then uses the compiler generated functions).
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;
}
};
这篇关于如何在 C++ 中使用基类的构造函数和赋值运算符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!