是否可以有一个带有 1 个未声明类型的输入参数的构造函数?
Is it possible to have a constructor with 1 input parameter of undeclared type?
这是我尝试做的事情:
Class 有两个对象(string myStr
和 int myInt
)
构造函数接受1个参数(数据类型不固定)。
If
参数为字符串:myStr = parameter; myInt = parameter.length();
If
参数为整数:myInt = parameter; myStr = "0000...0"
(长度为“参数”的字符串,由for循环设置)
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;
}
只有我的两个比特币...
这是我尝试做的事情:
Class 有两个对象(
string myStr
和int myInt
)构造函数接受1个参数(数据类型不固定)。
If
参数为字符串:myStr = parameter; myInt = parameter.length();
If
参数为整数:myInt = parameter; myStr = "0000...0"
(长度为“参数”的字符串,由for循环设置)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;
}
只有我的两个比特币...