我正在尝试理解一些C ++代码并发现我的C ++有点松懈。除其他外,代码具有以下类结构(CLASS1
到CLASS3
为简洁起见未显示):
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 ++程序员来说是一个简单的问题。
答案 0 :(得分:2)
在基本说明符列表中列出多个类允许类从多个其他类继承。这通常称为multiple inheritance。
在函数声明之后放置throw(error)
是函数表达它可能引发的异常的一种方式。它被称为异常规范。在这种情况下,具有许多参数的CLASS4
构造函数声明它可能抛出error
异常。这些异常规范现在已在C ++ 11中弃用。
T(const T&)
形式的构造函数称为复制构造函数。当通过复制另一个对象来创建对象时,会在以下情况下调用它们:
T first;
T second(first);
您的CLASS4
类有一个复制构造函数。期望在使用复制构造函数构造对象之后,新对象将是旧对象的副本。
答案 1 :(得分:2)
class CLASS4
:public CLASS3
,public CLASS2
是多重继承。 多重继承的目的是使您的对象的功能还具有 CLASS2 和 CLASS3 的功能,这些功能是从 CLASS4创建的(阅读此页面了解详细信息:http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr134.htm)
throw(错误)应该在发现错误时抛出错误,它可能听起来很蹩脚,但它用于异常处理:)(我建议你阅读这个清除依据的页面:http://msdn.microsoft.com/en-us/library/6dekhbbc(v=vs.80).aspx)
和CLASS4(const CLASS4&);
是复制构造函数。 &#34;复制构造函数是C ++编程语言中的一种特殊构造函数,用于将新对象创建为现有对象的副本。&#34; (引自维基百科。http://en.wikipedia.org/wiki/Copy_constructor)
答案 2 :(得分:2)
class CLASS4: public CLASS3, public CLASS2
表示CLASS4继承了CLASS3 和 CLASS2的公共方法和属性,并将它们与它自己的公共方法(即它们是CLASS4的公共方法)大致相同。如果您使用private CLASS3, protected CLASS2
,您将采用CLASS3的公共方法,并在CLASS4中将它们设为私有。同样,在该示例中,CLASS2的公共方法将受到保护。这在某些情况下很有用:假设您有一个可以序列化到磁盘并以有意义的方式绘制到屏幕的类。你继承了#Serial; Serialisable&#34;和#34;可渲染&#34;获得两者的属性。
CLASS4(const CLASS4& VARH)
构造函数称为&#34;复制构造函数&#34;。给出一个CLASS4的例子,让我成为一个新的CLASS4,其属性中具有所有相同的值。默认情况下,C ++为您提供了一个简单的方法,它只是依次复制每个属性,因此您通常不需要指定。如果您正在做一些聪明的事情(比如你分配了一大块内存并且你想要复制那个内存的内容而不仅仅是指向它的指针),你需要手动指定自己的内容来做聪明的事情