首页 > 试题广场 >

有以下程序 #include using...

[不定项选择题]
有以下程序
#include <iostream>
using namespace std;
class D{
    int d;
public: 
    D(int x=1):d(x){}
    ~D(){cout<<"D";}}; 
int main(){ 
    D d[]={_____________};
    D* p=new D[2];
    delete[]p;
    return 0; 
}
程序运行的结果是DDDDD,请为横线处选择合适的程序(      )
  • 3,3,3
  • D(3), D(3), D(3)
  • 3,3,3,3
  • D(3,3),D(3,3)
A之所以也行的原因是发生了隐式类型转换,说明c++不是类型安全的语言
发表于 2020-10-08 16:08:53 回复(1)
~表示析构函数(destructor), 与构造函数相反,当对象脱离其作用域时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。在这里,delete调用了两次析构,再调用三次。A 处发生了隐式类型转换,explicit 可以禁止这种转换
发表于 2019-03-12 09:11:09 回复(0)
这里是因为删除调用析构函数,那个指针那里两次,然后d[],里面三个元素在三次,所以一共五次吧。不知道对不对,刚入门。
发表于 2021-08-16 12:41:05 回复(1)
此处如果在构造函数前加上explicit关键字 此时A选项就是错误的 并且编译会报错
发表于 2023-03-30 18:14:22 回复(0)
A,触发了转换构造函数。
发表于 2022-02-28 19:48:03 回复(0)
A选项,整数触发了类型转换构造
发表于 2023-11-21 20:28:20 回复(0)
转换构造函数可以将其它类型转换为当前类类型。
转换构造函数也是一种构造函数,它遵循构造函数的一般规则。转换构造函数只有一个参数。
发表于 2022-03-08 20:12:35 回复(0)