Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 帮助我理解这个简单的c++;类定义、构造函数和;初始化_C++_Constructor - Fatal编程技术网

C++ 帮助我理解这个简单的c++;类定义、构造函数和;初始化

C++ 帮助我理解这个简单的c++;类定义、构造函数和;初始化,c++,constructor,C++,Constructor,下面是类定义(用于异常处理): 后来,它的用法如下: throw MyException("file too short"); 抛出后,是否创建并初始化了新对象?不管是什么情况,我不明白类定义如何允许它用文本字符串初始化。它需要一个指向文本字符串的指针,不是吗?然后将pReason设置为该指针,对吗?这是如何涉及到行常量char*pReason的?我很困惑,至少有人能给我解释一下类的定义吗?我可能只是在看一些显而易见的事情。我已经从上面的代码复制了“C++程序员游戏”第90页,BTW.< /P

下面是类定义(用于异常处理):

后来,它的用法如下:

throw MyException("file too short");

抛出后,是否创建并初始化了新对象?不管是什么情况,我不明白类定义如何允许它用文本字符串初始化。它需要一个指向文本字符串的指针,不是吗?然后将pReason设置为该指针,对吗?这是如何涉及到行常量char*pReason的?我很困惑,至少有人能给我解释一下类的定义吗?我可能只是在看一些显而易见的事情。我已经从上面的代码复制了“C++程序员游戏”第90页,BTW.< /P> < P>一个字符串,C++中的字符串是一个指向字符串的指针…实际上,有点。更迂腐一点,它是一个字符数组,后跟一个整数值为零的字符。字符是一个整数。嗯。。。在C++中,字符串文字不是STL字符串类的实例,即STD::string。至少可以说,这在面向对象语言中是相当罕见的。这是C++狂野而鲁莽的青年时代的产物

如果将字符串文字分配给任何对象(除非将其用作数组的初始值设定项),或将其传递给函数,则分配或传递的是数组中第一个字符的地址——指向字符串的指针。这就是您在对构造函数的调用中看到的:传递给构造函数的是字符串文本中第一个字符的地址,它存储在。。。无论编译器认为它属于哪里。那不关我们的事

此行将pReason声明为类的成员变量。const部分意味着您不能更改它所指向的字符串(除非您特意这样做,但您确实不应该这样做)


在C++中,这就是如何告诉编译器,你的类将有一个具有该类型和名称的成员。p> const char*pReason是字段的声明。构造函数包含初始值设定项pReason(pTxt)


编辑:我根据评论中的评论编辑了这篇文章。

-1:那是不正确的。您可以自由分配到
pReason
。您正在考虑将其声明为
char*const pReason
。我将恢复您的编辑。
常量
不适用于此处的成员。相反,这意味着您不能更改字符。您仍然可以随意多次更改存储在
pReason
中的地址。字符串文字不是“指向字符数组的指针”。它是一个字符数组,与所有数组一样,在大多数情况下,它会隐式转换为指向其初始元素的指针。@Troubadour,@ed-j-plunkett常量成员是
char*const pReason或可能
常量字符*常量前置。抱歉,刚才看到你的评论。@ Turb-Tx,我对C++的态度比我想的要高。James McNellis——当您将字符串文字“传递”给构造函数或将其分配给指针时,传递或分配的是数组中第一个字符的地址。你说得对,但是我认为,对于一个刚开始学习这种语言的人来说,把字符串文字当作指针要比在这一阶段把注意力放在区分上要好得多。谢谢大家。我很高兴这些东西真的很混乱。你的类定义是非常基础的,所以很明显你在学习C++的时候很早。我建议先找一份工作,把它做完。
throw MyException("file too short");
const char * pReason;