是否可以有一个带有 1 个未声明类型的输入参数的构造函数?

Is it possible to have a constructor with 1 input parameter of undeclared type?

这是我尝试做的事情:

  1. Class 有两个对象(string myStrint myInt

  2. 构造函数接受1个参数(数据类型不固定)。

  3. If参数为字符串:myStr = parameter; myInt = parameter.length();

  4. If 参数为整数:myInt = parameter; myStr = "0000...0" (长度为“参数”的字符串,由for循环设置)

  5. Else : cout << "Error";

是否可以执行我在第 2 行中描述的操作?

我已经设法仅使用字符串和转换数据类型来做一些变通方法(在为 myStr 的长度强加一个人为下限时能够做到这一点)但是这导致我进一步出现其他问题行。

Is it possible to have a constructor with 1 input parameter of undeclared type?

从技术上讲,您可以使用可变参数,它允许未指定数量的未指定类型的参数。但我建议不要使用它。

必须声明所有其他参数的类型。

  • If parameter is string: myStr = parameter; myInt = parameter.length();

  • If parameter is int: myInt = parameter; myStr = "0000...0" (string of length "parameter", set by for loop)

您可以使用两个而不是一个构造函数轻松实现这一点。一个接受字符串,另一个接受整数。

问题不是使用单个参数,而是您稍后需要找出参数的数据类型。

一个常用的技巧是使用通用指针或通用对象 class 引用或指针。

MyClass::MyClass ( void* P );
MyClass::MyClass ( SomeBaseClass& P);

由于您正在处理更简单的数据,您可能想尝试 O.O。将值嵌套在对象中,然后检查数据类型的方法:

class BaseClass
{
  // ...
} ;

class IntegerClass: BaseClass
{
  int Value;
} ;

class StringClass: BaseClass
{
  String Value;
} ;

并且您的 class 可以接收“BaseClass”对象引用:

class MyClass
{
  private int MyInt;
  private String MyString;
  
  MyClass ( BaseClass& P ) 
  {
     if ( P is IntegerClass )
     {
       // 
     }
     else if ( P is StringClass )
     {
       //
     }
  }
} ;

int main (...)
{
  IntegerClass *i = new IntegerClass(5);
  StringClass *s = new StringClass ("Hello");
  
  MyClass *O1 = new MyClass(i);
  MyClass *O2 = new MyClass(s);
  
  // Display values of O1 and O2 here
  
  free O2;
  free O1;
   
  free s;
  free i;
  
  return 0;
}

只有我的两个比特币...