我的代码有2个不同的构造函数,一个只有一个无符号参数,另一个有一个char和一个无符号,其中unsigned具有默认值。如何区分字符型和无符号int作为构造函数的参数
Myclass::Myclass(unsigned);
Myclass::Myclass(const char, unsigned = 1);
问题IST,当我尝试以下方法:
Myclass a = 'A';
只用签名作为参数调用构造函数(在本例中65)
我怎么能有第二个构造函数在这种情况下被调用? 我也不想从0-255的值只解释为Ascii值。
编辑:
实施例的代码显示错误:
部首:
#ifndef Myclass_H_
#define Myclass_H_
class Myclass {
public:
Myclass(unsigned int = 10);
Myclass(const char*);
Myclass(char , unsigned int= 10);
Myclass(const Myclass&);
virtual ~Myclass();
};
#endif /* Myclass_H_ */
类体:在控制台
#include "Myclass.h"
#include <iostream>
using namespace std;
Myclass::Myclass(unsigned int)
{
cout << "unsigned" << endl;
}
Myclass::Myclass(const char*)
{
cout << "pointer" << endl;
}
Myclass::Myclass(char , unsigned int)
{
cout << "char" << endl;
}
Myclass::Myclass(const Myclass&)
{
cout << "copy" << endl;
}
Myclass::~Myclass(){}
int main()
{
Myclass a = 'A';
return 0;
}
显示 “无符号”。
您应该使构造函数明确,避免语义复杂化。 –
我认为这个问题的答案是:获得一个有效的C++编译器!第二次过载显然更好。如果编译器在从字符文字转换时选择'unsigned'超载,那么这是错误的。你能提供一个显示问题的[SSCCE](http://sscce.org/)吗? –
Re。 “编辑”,当然''A''不匹配'(char,unsigned int)'。你最初声称第二个参数有一个默认值。 –