懂c++达人乱进,我有很多问题

大漠张三

知名会员
VIP
注册
2003-04-18
消息
9,432
荣誉分数
84
声望点数
158

代码:
class D1 : public Base { 
    public: 
         D1(int b, int d1) : Base(b);
         ~D1();


我想问,如果D1 constructor 被call的话,一个Base object也会被created对不对?
如果D1 destructor被call呢?Base 的destructor会不会被call?假设~D1里面没有“~Base()”这么一行。




代码:
#include <iostream> 
using namespace std; 

class DivideByZero{ 
    public: void print(); 
}; 

class Negative{ 
    public: void print(); 
}; 

void DivideByZero:: print(){ 
    cout << “Divide by Zero” << endl; 
} 

void Negative:: print(){ 
    cout << “Negative” << endl; 
}

void bottom(int i){ 
    if (i == 0) throw DivideByZero(); 
    cout << “100/i == “ << 100/i << endl; 
} 

void middle(int i){ 
    try { 
      bottom (i); 
      if (i < 0) throw Negative(); 
    } 
    catch (DivideByZero &e){ 
      cout << “In middle: “; 
      e.print(); 
    } 
} 

void top(int i){ 
    middle(i); 
    try{ 
      middle(10); 
    } 
    catch (...){ 
      cout << “Error in top” << endl; 
    } 
}

int main(){ 
    int i; cin >> i; 
    try{ 
      top(i); 
    } 
    catch (Negative){ 
      cout << “Negative in main” << endl; 
    } 
    catch (DivideByZero){ 
      cout << “Divide by zero in main” << endl; 
    } 
    cout << “Done” << endl; return 0; 
}


我想问,如果i=-10的话,output是什么?
如果i = 0,output是什么?
 
destructor会被call的。因为D1是从base继承过来的。你在创建一个D1的reference的时候,他回去看super class的相关。然后在spuer class县调用一便。然后,子类再加上额外的属性!

你可以尝试自己debug看看。来求证。比如。你写一个super class叫。A,子类为B.随便在heap内存里丢些垃圾。用~A()来删掉这些垃圾。~B()里面就不需要在操作了。否则就是double deletion肯定出错!
 
最初由 Squall 发布
destructor会被call的。因为D1是从base继承过来的。你在创建一个D1的reference的时候,他回去看super class的相关。然后在spuer class县调用一便。然后,子类再加上额外的属性!

你可以尝试自己debug看看。来求证。比如。你写一个super class叫。A,子类为B.随便在heap内存里丢些垃圾。用~A()来删掉这些垃圾。~B()里面就不需要在操作了。否则就是double deletion肯定出错!


那就是说如果
~Base(){cout<<“Base ”;}
~D1() {cout<< “D1”;)

如果在main里call ~D1();output就会是“Base D1”?
 
这是道output的题目咯。这个我很suck的。2个肯定都要call到的。倒是我忘了次序了:(

为了求证,自己写个小程序。求证一下吧。
 
最初由 Squall 发布
这是道output的题目咯。这个我很suck的。2个肯定都要call到的。倒是我忘了次序了:(

为了求证,自己写个小程序。求证一下吧。


如果Base class的destructor是virtual呢?那岂不是一个destructor要call 两遍?
 
看见楼主背个小包儿出去玩儿。
 
不会, 不会...
不过大家加油了...
 
最初由 大漠张三 发布



如果Base class的destructor是virtual呢?那岂不是一个destructor要call 两遍?

就因为是virtual才不会call两次,试一下就知道了
 
后退
顶部