如何在下面的代码中对对象进行显式初始化...
#include"iostream"
using namespace std;
class per{
char *name;
int a;
public:
per(int x = 0,char *str = 0):a(x),name(str){}
char* get()
{
return name;
}
};
int main()
{
per obj(100,"test"); // works fine
// now if i want a explicit initialization for above how will i do?
// example -- per obj = (100,"test");
// but i am getting error or may be not aware how to use
return 0;
}
答案 0 :(得分:3)
怎么样
per obj = per(100,"test");
条款直接和复制初始化。
您的初始化也是明确的。
答案 1 :(得分:1)
让我们讨论评论代码中的实际问题,即per obj = (100,"test");
。这不会被初始化,因为首先为100,
(我的意思是逗号运算符)计算语句,然后进行初始化。
所以现在,作业per obj = (100,"test");
将显示为per obj = "test";
。这会导致编译错误,因为预期的第一个参数是int
而不是char *
。你应该很幸运将这个天窗问题作为编译问题。只是改变构造函数中的初始化顺序,这将消失。导致一个主要的错误没有被注意到。基本上你所期望的以及编译器如何处理语句在这种情况下是不同的。
答案 2 :(得分:0)
如果你的编译器支持C ++ 11,你可以这样做:
per obj = { 100, "test" };