首页 > 试题广场 >

请问以下说法,哪个是正确的?

[单选题]
请问以下说法,哪个是正确的:
  • 每个类都有一个无参数的构造函数。
  • 每个类都有一个拷贝构造的函数。
  • 每个类能有多个构造函数。
  • 每个类能有多个析构函数。
A:用户自定义了构造函数编译器不会合成无参构造函数
B:?一个类可以有多个拷贝构造函数
class A{};
class B: public A{
public:
B(const B&);
B(const A&);
};
D:一个类只能有一个析构函数
发表于 2020-02-19 23:06:14 回复(1)
每个类都有一个无参数的构造函数。(当只定义了有参数的构造函数,无参数构造函数是不会自动生成的)
B 每个类都有一个拷贝构造的函数。(正确)
C 每个类能有多个构造函数。(不一定,比如某些类库的类,只有一个构造函数,比如Object类)
D 每个类能有多个析构函数。(不对,析构函数不能被重载,只能被重写,只有一个)
发表于 2016-08-01 09:30:05 回复(8)

A:用户自定义了构造函数编译器不会合成无参构造函数
B:?一个类可以有多个拷贝构造函数
class A{};
class B: public A{
public:
B(const B&);
B(const A&);
};
D:一个类只能有一个析构函数

发表于 2014-11-17 12:04:07 回复(0)
@ruosu 的回答是正确的,参看ifstream或者ofstream的源程序
typedef basic_istream<char, char_traits<char> > istream;

public:
	__CLR_OR_THIS_CALL basic_istream(const _Myt&) = delete;
	_Myt& __CLR_OR_THIS_CALL operator=(const _Myt&) = delete;

发表于 2017-06-12 11:23:57 回复(0)
正确答案:C
A:当定义了有参数的构造函数时,编译器不会提供无参数的默认构造函数,这时如果自己不定义,类就没有无参数的构造函数。
B:拷贝构造函数可以定义为删除的,就是没有,不允许拷贝,标准库中IO流类是不允许拷贝的。
C:正确,构造函数可以有多个。
D:析构函数最多只能有一个,没有析构函数的类是无法定义对象的。
发表于 2016-08-01 15:49:01 回复(1)
B对吧,拷贝构造函数是编译器一定会生成的啊
发表于 2015-09-06 08:40:45 回复(4)
第二个选项应该错在,当用不到拷贝构造函数的时候编译器是不会构造出来的。也就是编译器是惰性构造。好像只有这么理解才能说明B是错的。
发表于 2015-09-05 22:20:50 回复(1)
文字题,没有什么意思。。
发表于 2015-08-21 14:52:10 回复(0)

A:每个类都有一个默认的无参数构造函数,如果没有显式定义构造函数,则编译器会自动生成一个无参数的构造函数。这个默认构造函数可以用来创建对象,如果没有提供初始化值,则成员变量将被默认初始化。

B:并非每个类都有拷贝构造函数,如果没有显式定义拷贝构造函数,则编译器会生成一个默认的拷贝构造函数。但是,如果类中包含了不能被拷贝的成员变量(如引用类型),则编译器将无法生成默认的拷贝构造函数。

C:每个类都可以定义多个构造函数,这些构造函数可以接受不同的参数,以满足不同的需求。使用不同的构造函数可以方便地创建不同的对象。

D:每个类只能有一个析构函数,用于在对象被销毁时执行清理操作。析构函数的名称与类名相同,以波浪号(~)开头。当对象超出其作用域、被 delete 或程序结束时,析构函数将被自动调用。

发表于 2023-10-24 19:46:10 回复(0)
这题有问题
B,拷贝函数一个类可以多个,但至少有一个。
C,构造函数可以有多个,但不是每个都有多个(空类)
发表于 2022-08-15 20:52:04 回复(0)
当类定义了移动构造函数时,编译器不会合成任何类型的拷贝构造函数,所有有可能没有拷贝构造。
发表于 2018-03-14 21:50:15 回复(0)
讲道理,被禁用也算是有拷贝构造函数吧,再说了我是否可以用友元来调用?真要是玩文字游戏没意义了啊
发表于 2017-08-28 15:27:41 回复(0)
  1. 确实可以禁止拷贝

  2. #define DISABLE_COPY(Class) \  
  3. Class(const Class &); \  
  4. Class &operator=(const Class &)  
  5.   
  6. class Widget    
  7. {    
  8. public:    
  9.     int* pi;    
  10. private:    
  11. DISABLE_COPY(Widget);  
  12. };  
发表于 2017-08-18 15:15:31 回复(0)
拷贝构造函数,构造函数,这不就是多个构造函数了吗……
发表于 2017-02-24 00:12:24 回复(0)
 每个类都有一个无参数的构造函数。(当只定义了有参数的构造函数,无参数构造函数是不会自动生成的)
B 每个类都有一个拷贝构造的函数。(不一定,可以禁用拷贝构造函数)  
C 每个类能有多个构造函数。(对)
D 每个类能有多个析构函数。(不对,析构函数不能被重载,只能被重写,只有一个)
发表于 2016-12-26 22:54:35 回复(0)
B 每个类都有一个拷贝构造的函数  (错误)
详解:
构造函数是一种特殊函数,而拷贝构造函数是一种特殊的构造函数,一个类可以有多个拷贝构造函数。例如:
X::X(X& x)
X::X(const X& x)
X::X(X& x, int a = 0, int b = 1…)

发表于 2016-09-26 13:46:19 回复(0)
A(const A& a);
A(A& a);
但题目说都有一个,又不是说只有一个,虽然可以有多个,但按照叙述B也应该是对的啊
(上述两个如果同时出现,编译器会有警告)

编辑于 2016-09-13 11:15:48 回复(0)
有时候不想用默认的拷贝构造函数我们会将拷贝构造函数给隐藏起来。把他声明为private,但是也是肯定会有拷贝构造函数吧
发表于 2016-09-05 19:14:42 回复(0)
c
可以重载多个构造函数
发表于 2016-08-01 22:42:42 回复(0)
这个题,应该没有答案。单例类,只有一个私有的构造函数。编译器也可以不提供默认拷贝构造函数。
发表于 2016-08-01 22:02:53 回复(0)