c++ - 调用STL容器的内置函数

标签 c++

我正在使用 C++ 进行编程,无法弄清楚如何访问父类中的 STL 容器。我有以下类(class):

class Card
class CardPile : private vector<Card*>
class Deck : public CardPile{Foo()}

我知道如果 Foo() 在 CardPile 类中,我可以使用 size() 调用 vector 的大小。我如何从 Foo() 调用 vector 的 size() 函数。

编辑:不幸的是,我不允许更改任何类定义

最佳答案

size()CardPile 的私有(private)方法,但如果适合设计,您可以将其公开或 protected :

class CardPile : private std::vector<Card*>
{
 public: // or protected
  using std::vector<Card*>::size;
};

这将允许您调用 size()要么无处不在(公共(public)),要么来自派生类( protected )。

但请记住,标准库容器并不是设计来继承的,特别是公开继承的。所以你可以改变你的 CardPile类(class)举办std::vector<Card*>数据成员。之后,如果您当前正在处理动态分配的Card,您可以考虑在 vector 中保存智能指针。对象。

class CardPile : 
{
 public: // or protected
  std::vector<Card*>::size_type size() const { return cards_.size(); }
 private: 
  std::vector<Card*> cards_
};

关于c++ - 调用STL容器的内置函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13542678/

相关文章:

c++ - 为什么 `wstring_convert` 抛出 range_error?

c++ - 查找服务器计算机中物理 CPU 插槽的数量

c++ - 编译一个非常大的 .cpp 文件

c++ - 用 C 语言访问文件以实现 OPC UA 协议(protocol)

c# - 基本位图字体渲染

C++:当两个类包含指向另一个类的指针时,如何解决派生类之间的模板循环依赖?

c++ - 为什么 QObject::disconnect(const QMetaObject::Connection &connection) 采用 const 参数来修改它?

c++ - 在 Symbian C++ 中将 unsigned char* 转换为 const TDesC8

c++ - 如何将字符串转换为const char

c++ - 如何使用 C++ 从 RAM 运行可执行文件?