C++ 从 Array 访问重载的构造函数

Posted

技术标签:

【中文标题】C++ 从 Array 访问重载的构造函数【英文标题】:C++ Access to the overloaded constructor from Array 【发布时间】:2016-01-07 08:05:27 【问题描述】:
class A
  int a;
  int b;
  A()
  A(int a, int b) : a(a), b(b)
 ;
class B
  A[3] a;
  public:
   void methodB();
;
B::methodB
  a[0](1, 1); //I want array to use A(int, int)constructor not default one.

我试图从 B 类中的 Array 调用重载的构造函数 A(int, int),它只是调用 A() 构造函数而不是 A(int, int) 为什么会这样。? 我该怎么办??

【问题讨论】:

创建Minimal, Complete, and Verifiable Example 时,请确保它确实构建(除非您发布有关构建错误的帖子)。不要在问题中重新输入代码,而是复制并粘贴实际代码。 methodB 不是构造函数——你不能影响任何成员变量的构造——这已经完成并且已经尘埃落定了。 【参考方案1】:

一旦对象已经被构造,你就不能再构造它。

你有几个选择:

使用构造函数初始化列表:

class B

    std::array<3, A> a;
public:
    B() : a1, 1, 2, 2, 3, 3
    
;

使用std::vector 并在需要时插入正确构造的对象

class B

    std::vector<A> a;
    ...
;

void B::methodB()

    a.emplace_back(1, 1);

使用向量并默认初始化构造函数初始化列表中的所有元素

class B

    std::vector<A> a;
public:
    B() : a3, 1, 1
    
;

【讨论】:

以上是关于C++ 从 Array 访问重载的构造函数的主要内容,如果未能解决你的问题,请参考以下文章

C++从青铜到王者第三篇:C++类和对象(中篇)

c++ 只继承公共构造函数

C++复制构造函数和=号重载问题

Cython 和重载的 c++ 构造函数

C++ - 构造函数重载 - 私有和公共

C++——list的模拟实现