如何初始化基类中的唯一变量(继承)
How to initialize unique variables in base class (Inheritance)
如果我在基类中声明几个变量,它们将在每个派生类中定义,对吗?我只想让基类中的变量一劳永逸地派生类。示例:
class Base{
public:
virtual ~Base();
protected:
Base();
int fileIndex;
};
class DerivedA : public Base{
public:
DerivedA();
virtual ~DerivedA();
void DoSth(); //using fileIndex
};
class DerivedB : public Base{
public:
DerivedB();
virtual ~DerivedB();
void DoSthDifferent(); //using the same fileIndex
};
我该怎么做?
只需将fileIndex
设为static
变量:
static int fileIndex;
然后,所有派生类中的所有实例都将共享相同的值
我假设这不是某个全局日志中需要保持整洁的文件索引。static
就可以了。
使用组合而不是(滥用(继承。
class FileAccessor
{
int fileIndex;
// Your stuff
};
Class A
{
std::shared_ptr<FileAccessor> mFileAccessor;
public:
A(std::shared_ptr<FileAccessor> fAccesor ) : mFileAccessor(fAccesor ) {}
void DoSth () { /* use mFileAccessor*/ }
};
Class B
{
std::shared_ptr<FileAccessor> mFileAccessor;
public:
B(std::shared_ptr<FileAccessor> fAccesor ) : mFileAccessor(fAccesor ) {}
void DoSth () { /* use mFileAccessor*/ }
};
int main()
{
auto fAccesor = std::make_shared<FileAccessor>();
A a{fAccesor};
B b{fAccesor};
}
这样,如果需要同步访问,则逻辑将保持在FileReader
中。
如果您需要让对象共享状态,那么通过将状态分解到另一个对象中来明确它。
相关文章:
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 如何从另一个文件继承私有成员变量和公共函数
- 继承时如何构建派生类的变量?
- 在类中继承静态变量?
- 打印所有继承的类成员变量和方法
- 如何在复杂继承中访问静态成员变量
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 继承/多态性 - 我是否被迫使用"protected"变量?
- 继承类中的 C++ 成员变量类型重写
- 对象成员变量还是继承
- 继承构造函数和其他变量的解决方法
- std::exception :使用虚函数和继承与变量
- 如何解决多次继承的不明确变量名称?
- 是否可以在不修改父类的情况下将成员变量初始化推迟到继承的类?
- 为什么继承的函数会更改基类中的成员变量,而不是与名为它的对象同名的对象
- 变量(继承自基模板类)的偏移量,由具有相同名称的成员遮蔽
- 静态变量继承C++
- 访问受保护的变量 - 继承和子类的复杂情况
- 私有变量继承
- 如何初始化基类中的唯一变量(继承)