#include<iostream.h> using namespace std; class Base {public: Base(){cout<<" construct in Base\n";} virtual ~Base() {cout<<" destruting Base "<<endl;} }; class Subclass:public Base { public: Subclass() {cout<<" construct in Subclass\n";} ~SubclassO {cout<<" destruting subclass"<<endl;} }; void test (Base* x) {delete x; } int main() {cout<<"first:\n"; Base *bc=new Base ; cout<<"second\n"; Subclass * sc=new Subclass; cout<<" calling test(be)\n"; test(be); cout<<"calling test(se)\n" test(sc); cout<<"end!\n"; return 0;
时间: 2024-03-08 12:50:32 浏览: 46
这是一个 C++ 的程序,它定义了一个基类 Base,和一个继承自 Base 的子类 Subclass。在 main 函数中,首先创建了一个 Base 类型的指针 bc,并且输出了 "construct in Base"。接着又创建了一个 Subclass 类型的指针 sc,并且输出了 "construct in Subclass"。
然后分别调用了两次 test 函数,这个函数的参数是一个指向 Base 类型的指针。在函数内部,使用 delete 运算符删除了这个指针所指向的对象。因为 Base 类和 Subclass 类都定义了虚析构函数(即带有 virtual 关键字的析构函数),所以在删除对象时会先调用子类的析构函数,再调用基类的析构函数。
最后输出了 "end!",程序结束。但是需要注意的是,代码中有一些语法错误,应该修改为:
```c++
#include <iostream>
using namespace std;
class Base {
public:
Base() {
cout << "construct in Base\n";
}
virtual ~Base() {
cout << "destructing Base\n";
}
};
class Subclass : public Base {
public:
Subclass() {
cout << "construct in Subclass\n";
}
~Subclass() {
cout << "destructing Subclass\n";
}
};
void test(Base* x) {
delete x;
}
int main() {
cout << "first:\n";
Base* bc = new Base;
cout << "second:\n";
Subclass* sc = new Subclass;
cout << "calling test(bc):\n";
test(bc);
cout << "calling test(sc):\n";
test(sc);
cout << "end!\n";
return 0;
}
```
阅读全文