如果我在基类中声明了几个变量,它们将在每个派生类中定义,对吧?我只想在基类中为所有派生类提供一次变量。例如:
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
};
我该怎么做?
答案 0 :(得分:2)
只需将fileIndex
变为static
变量:
static int fileIndex;
然后,所有派生类的所有实例将共享相同的值
答案 1 :(得分:1)
我假设这不是某些全局日志中的文件索引,需要保持整洁。 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
。
如果你需要让对象共享状态,那么通过将状态分解为另一个对象来使其显式化。