创建具有不同数据类型的对象的单个构造函数
single constructor to create objects with different data types
如何使用单个构造函数仅创建以下对象:
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
类A应该有一个单一的构造函数来容纳对象x, y和z的创建。上面指定的3行不允许更改。
您不能(更不应该!)使用一个构造函数来创建所有这些对象。
因为这个原因,你可以有可以接受不同参数的构造函数。
要问的重要问题是:
你到底想要达到什么目标?这有什么用?
也许你试图用错误的方式解决问题。如果你能提供一些细节,我们可以帮助你更好。
恶心!!!!
无论如何,如果我被迫(例如,假设这是一个作业问题),我会使用某种变体:class Variant {
public:
Variant();
Variant( int );
Variant( double );
Variant( const char * );
~Variant();
private:
union data { ... };
enum type { ... };
};
然后在我可怕的单个构造函数中使用它,以及默认参数来允许空构造。
A::A( Variant p1 = Variant(), Variant p2 = Variant(), Variant p3 = Variant() );
与c++11
:
#include <iostream>
struct A
{
template<typename... Args> A(Args&&... x)
{
std::cout << "construct An";
}
};
int main()
{
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
return 0;
}
在c++ 03中可以使用初始化函数:
class A
{
public:
A(int x, const char* y, double z)
{
Init(x, y, z);
}
A(const char* y, int x)
{
Init(x, y);
}
A()
{
Init();
}
private:
void Init(int x = 0, const char* y = 0, double z = 0)
{
}
};
在c++ 11中可以使用构造函数委托:
class A
{
public:
A(int x, const char* y, double z)
{
}
A(const char* y, int x)
: A(x, y, 0)
{
}
A()
: A(0, 0, 0)
{
}
};
为什么不直接:?
class A {
public:
A(...) { }
};
// test:
int main() {
A x;
A y("Hello", 7);
A z(3, "Hello", 2.4);
}
相关文章:
- 如何限制在C++中为单个类创建的对象数量?
- 为什么平均打印数组元素比打印单个对象慢C++?
- 在C++中有多个指向单个对象的指针的正确方法是什么?
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 使用 new in C++(在 Windows 上)分配大于 2GB 的单个对象
- 从单个.cpp构建共享对象
- OpenCV Otsu的阈值:计算多个Mat对象的单个阈值
- 如何使用每个对象的单个构造函数参数动态分配C++对象数组?
- 如何在考虑对象切片的同时通过传入单个 Base 对象来打印出数组中的对象?
- 可能从单个方法返回不同类型的对象
- 如何使用单个对象调用具有相同名称的两个类函数
- 单个文件库的对象文件 (.o) 与头文件
- 将矩阵建模为单个统一缓冲区对象
- 执行 commaind "systeminfo"后,等待单个对象停止
- 如何在单个 (.a) 存档中仅获取所需的对象文件
- 对象的"this"指针是否等于指向其(单个)基类的指针?
- C++ unordered_map单个对象上的迭代器
- 为多个对象创建单个线程
- 在向量中存储模板化对象(在<int><double>单个向量中存储类、类)
- C 中单个对象的线程安全容器