gpt4 book ai didi

C++ 设计(基类中的行为,派生类中提供的私有(private)成员)

转载 作者:太空宇宙 更新时间:2023-11-04 15:26:13 24 4
gpt4 key购买 nike

我有 6 个类,它们都执行相同的操作。我想将常见的行为转移到一个常见的 [基] 类。

有 6 个单独的对象要执行的操作。这六个对象位于派生类中。直观上,私有(private)成员对象将通过基类中的子(派生类)访问。

我正在寻找的 C++ 模式是什么?

class Base
{
// Common behavior, operate on m_object
...
void Foo()
{
m_object.Bar();
}
};

class Derived1 : public Base
{
// No methods, use Base methods

private:
MyObject1 m_object;
}

class Derived2 : public Base
{
// No methods, use Base methods

private:
MyObject2 m_object;
}

让我陷入这种情况的是 MyObject1MyObject2 等提供 Bar(),但不要共享公共(public)基类。我真的无法解决派生问题,因为这些对象来自外部库。

最佳答案

如果在派生类中引入它们,那么基类不能直接访问它们。基类如何知道所有派生类都有特定成员?

你可以像这样使用虚拟保护方法:

class my_base
{
protected:
virtual int get_whatever();
virtual double get_whatever2();
private:
void process()
{
int y = get_whatever();
double x = get_whatever2();
//yay, profit?
}
}

class my_derived_1 : my_base
{
protected:
virtual int get_whatever()
{
return _my_integer;
}

virtual double get_whatever2()
{
return _my_double;
}
}

另一种可能性(如果您想从派生类调用基方法)是简单地向基方法提供参数。

class my_base
{
protected:
void handle_whatever(int & arg);
};

class my_derived : my_base
{
void do()
{
my_base::handle_whatever(member);
}

int member;
};

关于C++ 设计(基类中的行为,派生类中提供的私有(private)成员),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7730540/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com