[面试题]构造函数

简介:
(1)
class Person{
    Person(int age){
    }
};
class Student:Person{
};
int main(){
    Student student;
}

A、Compile-time error at 5. 

B、Compile-time error at 1. 

C、The compiler attempts to create a default constructor for class B. 

D、The compiler attempts to create a default constructor for class A.

解析:A

报错:error: no matching function for call to 'Person::Person()“

原因是因为子类Student中没有定义构造方法,那么就会有一个默认的无参构造方法,我们知道,在创建子类对象的时候,会调用父类的构造方法无参构造方法,因为Person类定义了一个带参数的构造方法,所以无参构造方法被覆盖了,所以在第5行会报A类中没有无参构造方法。
只要给Person定义一个无参构造方法就行了。

class Person{
    Person(int age){
    };
    public:
        Person(){
        };
};

class Student:Person{
};

(2)构造函数的初始化列表

class Person{
    private:
        int b;
        const int c;
        int &d;
    public:
        Person(int a);
};

Person::Person(int a){
    b = a;
    c = a;
    d = a;
}
报错:

error: uninitialized member 'Person::c' with 'const' type 'const int'

error: uninitialized reference member 'Person::d'

error: assignment of read-only data-member 'Person::c'
解析:可以初始化const对象或引用类型对象,但不能对他们进行赋值。在开始执行构造函数的函数体之前,要完成初始化。初始化const对象或引用类型对象

唯一的一个机会是在构造函数初始化列表中。

正确方式:

Person::Person(int a):b(a),c(a),d(a){

}




目录
相关文章
|
6月前
|
Java
【Java基础面试三十四】、接口中可以有构造函数吗?
这篇文章讨论了Java中接口不能包含构造函数的原因,主要解释了接口中的成员变量默认是public static final类型的常量,不需要通过构造函数初始化,且接口本身不能被实例化,因此构造函数在接口中没有意义。
|
Java 数据库连接
Java 最常见的面试题:hibernate 实体类必须要有无参构造函数吗?为什么?
Java 最常见的面试题:hibernate 实体类必须要有无参构造函数吗?为什么?
|
JavaScript 前端开发
面试向:原型、原型链、构造函数、继承、实例对象
面试向:原型、原型链、构造函数、继承、实例对象
面试向:原型、原型链、构造函数、继承、实例对象
Day07 - 为什么箭头函数不能当构造函数 | 面试365
Day07 - 为什么箭头函数不能当构造函数 | 面试365
258 0
|
JavaScript 前端开发
Day06 - 构造函数的返回值与new实例关系 | 面试365
Day06 - 构造函数的返回值与new实例关系 | 面试365
175 0
|
C++
C++面试之 类string的构造函数、拷贝构造函数和析构函数
编写类String 的构造函数,析构函数,拷贝构造函数和赋值函数 class String { public: String(const char *str=NULL);//构造函数 String(const String &other);//拷贝构造函数 ...
2097 0
|
程序员 编译器
《.NET程序员面试秘笈》----面试题7 构造函数有什么作用
【考点】各种形态构造函数的理解,派生类的构造函数,构造函数的重载。
1418 0
|
存储 C# 程序员
朋友面试被问到---静态构造函数
原文:朋友面试被问到---静态构造函数 事情是这样的 朋友是一个一年多经验的.Net开发人员 在面试新公司的时候,被面试官问到什么是"静态构造函数" 朋友回来告诉我, "构造函数还有静态的吗,看来这次面试要黄了" "对的,构造函数是有静态的啊,不过也难怪,很少人会用到,看来面试官是要看你的...
818 0
|
3月前
|
存储 缓存 算法
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!
本文介绍了多线程环境下的几个关键概念,包括时间片、超线程、上下文切换及其影响因素,以及线程调度的两种方式——抢占式调度和协同式调度。文章还讨论了减少上下文切换次数以提高多线程程序效率的方法,如无锁并发编程、使用CAS算法等,并提出了合理的线程数量配置策略,以平衡CPU利用率和线程切换开销。
面试官:单核 CPU 支持 Java 多线程吗?为什么?被问懵了!