对象的明确声明

时间:2013-02-20 18:37:23

标签: c++ constructor

如何在下面的代码中对对象进行显式初始化...

#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;
}

3 个答案:

答案 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" };