1

我试图理解一些 C++ 代码,发现我的 C++ 有点生疏。除其他外,代码具有以下类结构(CLASS1CLASS3简洁起见未显示):

class CLASS4
  :public CLASS3
  ,public CLASS2{
  public:
    CLASS4(double VARA, double VARB, char VARC, int VARD, double VARE, std::vector<double> VARF, std::string VARG = "")
    throw(Error);
    CLASS4(const CLASS4&);
    ~CLASS4();

    double METHOD1();

  protected:
    void METHOD2();
};

CLASS4::CLASS4(double VARA, double VARB, char VARC, int VARD, double VARE, vector<double> VARF, string VARG) throw(Error)
  :CLASS1(VARC, VARD, VARE, VARF, VARG)
  ,CLASS2(VARB)
  ,CLASS3(VARA, VARC, VARD, VARE, VARF, VARG){}

CLASS4::CLASS4(const CLASS4& VARH)
  :CLASS1(VARH), CLASS2(VARH), CLASS3(VARH){}

CLASS4::~CLASS4(){}

我理解对象的概念和继承的概念。我看到CLASS4. 我不明白的是继承中的类列表:public CLASS3, public CLASS2。它的目的是什么?此外,我想知道throw(Error)应该做什么。另外我想知道第二个构造函数的目的是什么CLASS4(const CLASS4&);。我知道这对于 C++ 程序员来说将是一个简单的问题。

4

3 回答 3

2

在基本说明符列表中列出多个类允许一个类从多个其他类继承。这通常称为多重继承

放在throw(error)函数声明之后是函数表达它可能抛出的异常的一种方式。它被称为异常规范。在这种情况下,CLASS4具有许多参数的构造函数声明它可能会抛出error异常。这些异常规范现在在 C++11 中已弃用。

表单T(const T&)的构造函数称为复制构造函数。当通过复制另一个对象来创建对象时,它们在以下情况下被调用:

T first;
T second(first);

你的CLASS4类有一个复制构造函数。预计在使用复制构造函数构造对象后,新对象将是旧对象的副本。

于 2012-12-07T12:51:26.987 回答
2
class CLASS4
  :public CLASS3
  ,public CLASS2

是多重继承。多重继承的目的是使您的对象的功能也具有从 CLASS4 创建的CLASS2和CLASS3功能阅读此页面以获取详细说明:http: //publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index。 jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr134.htm )

throw(Error)应该在发现错误时向您抛出错误,听起来可能很蹩脚,但它用于异常处理:)(我建议您阅读此页面以获得清晰的参考:http: //msdn.microsoft.com /en-us/library/6dekhbbc(v=vs.80).aspx )

并且CLASS4(const CLASS4&);是复制构造函数。“复制构造函数是 C++ 编程语言中的一种特殊构造函数,用于创建新对象作为现有对象的副本。” (引自维基百科。http: //en.wikipedia.org/wiki/Copy_constructor

于 2012-12-07T12:54:23.790 回答
2
class CLASS4: public CLASS3, public CLASS2

就是说 CLASS4 继承了 CLASS3CLASS2 的公共方法和属性,并将它们视为自己的公共方法(即它们是 CLASS4 的公共方法)。如果您使用private CLASS3, protected CLASS2,您将采用 CLASS3 的公共方法,并在 CLASS4 中将它们设为私有。同样,在该示例中,CLASS2 的公共方法将受到保护。这在某些情况下很有用:假设您有一个可以序列化到磁盘并以有意义的方式绘制到屏幕上的类。您将继承“Serialisable”和“Renderable”以获得两者的属性。

构造CLASS4(const CLASS4& VARH)函数被称为“复制构造函数”。给定一个 CLASS4 的例子,让我成为一个新的 CLASS4,它的属性具有所有相同的值。默认情况下,C++ 为您提供了一个简单的方法,它只依次复制每个属性,因此您通常不需要指定。如果您正在做一些聪明的事情(例如您分配了一大块内存并且您还想复制该内存的内容而不仅仅是指向它的指针),您需要手动指定自己的聪明的事情。

于 2012-12-07T13:04:16.587 回答