Advertisement

这是什么鬼delete

阅读量:

024:这是什么鬼delete

总时间限制:

1000ms

内存限制:

65536kB

描述

程序填空输出指定结果

复制代码
 #include <iostream>

    
 using namespace std;
    
 class A 
    
 { 
    
 public:
    
 	A() { }
    
 // 在此处补充你的代码
    
  
    
 }; 
    
 class B:public A { 
    
 	public: 
    
 	~B() { cout << "destructor B" << endl; } 
    
 }; 
    
 int main() 
    
 { 
    
 	A * pa; 
    
 	pa = new B; 
    
 	delete pa; 
    
 	return 0;
    
 }
    
    
    
    

输入

输出

destructor B
destructor A

样例输入

复制代码

样例输出

复制代码

思路:

这道题的要点就是虚函数的应用。pa是类A指针,在new B的时候会调用类A对象的构造函数(类B是类A的派生类),那delete pa的时候,会调用析构函数,根据虚函数的特性,pa指向的是类B对象,故调用类B的析构函数,然后根据先析构派生类后析构基类的准则,再调用类A的析构函数。

代码:

复制代码
 #include <iostream>

    
 using namespace std;
    
 class A 
    
 { 
    
 public:
    
 	A() { }
    
 	virtual ~A(){
    
 		cout << "destructor A" << endl;
    
 	}
    
 }; 
    
 class B:public A { 
    
 	public: 
    
 	~B() { cout << "destructor B" << endl; } 
    
 }; 
    
 int main() 
    
 { 
    
 	A * pa; 
    
 	pa = new B; 
    
 	delete pa; 
    
 	return 0;
    
 }
    
    
    
    

总结:

这道题主要考的就是虚函数的引用和其特点,也衬托出了虚函数的好处,注意一点,在析构函数和构造函数中不能使用虚函数,但没有代表他们本身不能是虚函数.

全部评论 (0)

还没有任何评论哟~