【发布时间】:2012-11-25 15:30:27
【问题描述】:
我试图理解一些 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++ 程序员来说将是一个简单的问题。
【问题讨论】:
-
class T : public U, public V是多重继承。throw-specifications 已弃用,您不应使用它们。T(T const&)是一个复制构造函数。另请参阅The Definitive C++ Book Guide and List。 -
其中不推荐使用的内容(不好的做法?)。我正在查看此代码以查找内存泄漏。会不会有关系?
-
你能说它到底应该做什么吗?
-
如果您正在寻找内存泄漏,请确保 destructors of the base-classes are
virtual. -
它们允许你明确地告诉一个函数可以抛出什么类型的异常。您仍然可以使用
noexcept(不推荐弃用)来指示函数不会引发任何异常。
标签: c++ class object inheritance throw