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

时间:2011-03-09 21:51:00

标签: c++ constructor

这里是类定义(用于异常处理):

class MyException {
public:
    MyException(const char * pTxt) : pReason(pTxt){};
    const char * pReason;
};

后来使用如下:

throw MyException("file too short");
抛出后,是否创建并初始化了一个新对象?无论如何,我不明白类定义如何允许用文本字符串初始化它。它需要一个指向文本字符串的指针,不是吗?然后将pReason设置为该指针,对吧?这怎么涉及行const char * pReason?我很困惑,至少有人能向我解释课程定义吗?我可能只是在寻找明显的东西。我复制了上面的代码来自“c ++ for game programmers”第90页,顺便说一句。

2 个答案:

答案 0 :(得分:1)

C ++中的文字字符串是指向字符串的指针......实际上是一种类型。更迂腐,它是一个字符数组,后跟一个整数值为零的字符。字符是整数。 Erm ...在C ++中,字符串文字不是STL字符串类std :: string的实例。至少可以说,这在面向对象的语言中是相当不寻常的。这是C ++野性和鲁莽青年的神器。

如果将字符串文字分配给任何内容(除非您将其用作数组的初始值设定项),或将其传递给函数,则分配或传递的是数组中第一个字符的地址 - 指针到字符串。这就是你在构造函数调用中看到的内容:传递给构造函数的是字符串文字中第一个字符的地址,它存储在编译器认为的任何地方所属。我们的业务都不在那里。

此行将pReason声明为类的成员变量。 const部分意味着你不能改变它所指向的字符串(除非你不顾一切地去做,但你真的不应该这样做。)

const char * pReason;

在C ++中,您可以告诉编译器您的类将拥有该类型和该名称的成员。

答案 1 :(得分:0)

const char * pReason是一个字段的声明。构造函数包含初始化程序pReason(pTxt)。

编辑:我在评论中的评论后编辑了这篇文章。

相关问题