撤消对象时,系统自动调用( )函数。 A. 成员函数 B. 构造函数 C. 析构函数 D. 普通函数
时间: 2024-03-23 07:43:16 浏览: 64
撤销对象时,系统自动调用析构函数。析构函数是一个特殊的成员函数,它与构造函数相对应,用于在对象销毁时进行清理工作,例如释放内存、关闭文件等。当对象被删除、销毁或超出作用域时,系统会自动调用析构函数。例如:
```c++
class Person {
public:
Person() {
cout << "constructor" << endl;
}
~Person() {
cout << "destructor" << endl;
}
};
int main() {
Person p; // 创建 Person 对象
// ...
return 0; // 对象超出作用域,自动调用析构函数
}
```
在上面的例子中,创建 `Person` 对象时会自动调用构造函数,当对象超出作用域时会自动调用析构函数。析构函数的名称是在类名前面加上波浪号 `~`,例如 `~Person()`。析构函数没有参数,也没有返回值。
相关问题
以下有关对象的叙述中,不正确的是()。 A. 撤销对象是必定要调用析构函数 B. 产生对象时必定要调用构造函数 C. 对象被保护,其私有成员不能任意访问 D. 对象可以没有构造函数或析构函数
以下有关对象的叙述中,不正确的是 D. 对象可以没有构造函数或析构函数。
对象是类的一个实例化的实体,它必须有构造函数和析构函数。构造函数是用于初始化对象的函数,而析构函数是用于撤销对象的函数。如果一个类没有显式定义构造函数或析构函数,编译器会自动生成默认的构造函数和析构函数。因此,对象必须有构造函数和析构函数,不能没有。选项 D 不正确。
写出类 Base、Inner、Top 三个类之间的关系 ⚫ 给各个类添加构造函数/析构函数,并在函数中加入输出语句,使得对象生成和消亡时, 能做出相应的显示;在main( )函数各语句执行前或后,也加入相应的输出信息,方便 观察构造函数/析构函数执行情况。最后从运行结果中分析总结出 Top 类生成对象以及 对象撤销时,构造函数/析构函数的调用规律。 ⚫ 在 Top 类中增加拷贝构造函数,比较 void fun1(Top t)和 void fun2(Top& t)调用时参数传 递的区别。 以上代码写在一个源文件中,从程序运行结果总结回答上面问题。
首先,Base、Inner、Top 三个类之间的关系是这样的:Top 是一个类,它包含一个 Inner 类的成员变量,Inner 是一个类,它包含一个 Base 类的成员变量。所以可以说 Inner 是 Top 的内部类,Base 是 Inner 的内部类。
为了给这些类添加构造函数和析构函数,并在函数中加入输出语句,我们可以这样做:
```
class Base {
public:
Base() {
std::cout << "Base 构造函数" << std::endl;
}
~Base() {
std::cout << "Base 析构函数" << std::endl;
}
};
class Inner {
public:
Inner() {
std::cout << "Inner 构造函数" << std::endl;
}
~Inner() {
std::cout << "Inner 析构函数" << std::endl;
}
Base b;
};
class Top {
public:
Top() {
std::cout << "Top 构造函数" << std::endl;
}
~Top() {
std::cout << "Top 析构函数" << std::endl;
}
Inner i;
};
```
现在我们可以在 main 函数中使用这些类来创建和删除对象,并在函数的各个语句执行前或后加入相应的输出信息,以方便观察构造函数和析构函数的执行情况。
```
int main() {
std::cout << "在创建 Top 对象之前" << std::endl;
Top t;
std::cout << "在创建 Top 对象之后" << std::endl;
return 0;
}
```
从运行结果中可以看出,在创
阅读全文