首页 > 试题广场 >

关于构造函数的描述下列说法正确的是

[不定项选择题]
关于构造函数的描述下列说法正确的是
  • 构造函数不能被重载
  • 构造函数不能被覆盖
  • 一个构造函数可以返回一个私有的或一个对象的引用
  • 构造函数代码执行顺序时是从最远的祖先类到当前的类层级
构造函数是没有返回值的
发表于 2019-07-15 16:59:27 回复(0)
构造函数可以被重载,不能为虚函数,没有返回值,创建对象时,基类的构造先调用,然后才是派生类里的

发表于 2022-04-23 18:14:52 回复(0)
d选项 这个要看声明顺序吧?
发表于 2020-10-21 10:40:43 回复(4)
<p>构造函数调用顺序是先父类,后子类,如果父类构造函数被覆盖,则子类无法访问父类构造函数,因此无法构造子类对象</p><p><br></p>
发表于 2020-08-29 16:52:43 回复(0)
我认为只选B 
构造函数代码的执行顺序,与当前类所声明的继承顺序有关,例如 
class A : public B,public D,public C
{
        public:
                A(int i) : B(i),C(i),D(i),a(i) {}
        private:
                int a;
}
此处省略B,C,D类的定义。
应先构造B在构造D在构造C最后对a赋值
发表于 2022-03-14 19:04:43 回复(2)
1. 首先分析选项A: - 构造函数是可以被重载的。重载是指在同一个类中定义多个同名的方法或构造函数,但它们的参数列表不同(参数个数、参数类型或参数顺序不同)。例如: class MyClass { MyClass() { // 无参构造函数 } MyClass(int num) { // 有参构造函数 } }   - 所以A错误。 2. 接着看选项B: - 构造函数不能被覆盖。覆盖是指子类重写父类的方法,要求方法名、参数列表、返回类型(除了协变返回类型)都要相同。而构造函数是用于初始化对象的特殊方法,它与类名相同,不存在覆盖的概念。子类可以有自己的构造函数来初始化自己的对象,并且可以通过 super 关键字调用父类的构造函数。所以B正确。 3. 再看选项C: - 构造函数没有返回值,它的作用是初始化对象,而不是返回一个值(包括私有的或一个对象的引用)。如果在构造函数中写了 return 语句,除了在某些特殊情况下(如在构造函数中提前返回以避免执行一些不必要的代码),一般是错误的。所以C错误。 4. 最后看选项D: - 构造函数代码执行顺序是从最远的祖先类到当前的类层级。当创建一个子类对象时,首先会调用最远祖先类(一般是 Object 类)的构造函数,然后依次调用父类的构造函数,最后调用子类自己的构造函数。所以D正确。 答案是BD。
发表于 2024-11-05 10:06:17 回复(0)
屏蔽掉默认构造函数算覆盖吗
编辑于 2023-12-30 00:18:49 回复(0)