[面试题]构造函数

(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){

}
时间: 2024-12-06 12:57:37

[面试题]构造函数的相关文章

《.NET程序员面试秘笈》----面试题7 构造函数有什么作用

面试题7 构造函数有什么作用 .NET程序员面试秘笈[考点]各种形态构造函数的理解,派生类的构造函数,构造函数的重载. [出现频率] [解答] 构造函数用于创建类的实例,并对实例进行初始化操作,通过不同的参数传递,可进行不同的实例初始化操作.本例通过多种不同形式的构造函数创建实例,并输出初始化的结果.在ch01目录下新建一个程序文件,并命名为Constructor.cs,编写代码如程序1.8所示. 在命令行下编译Constructor.cs后,执行Constructor程序,其效果如图1.10所

C#静态构造函数与抽象类构造函数的面试题

前段时间找工作,去面试碰到了两道关于C#构造函数的题目,首先来看静态构造函数的题目如下(原题不 是如此,但类似,因为实在记不住那题目的样子了,第二题也是): class Base { static Base() { Console.WriteLine("Static Base"); } public Base() { Console.WriteLine("Base"); } } 问当创建Base的实例时产生什么输出?我咋一看,挺简单,我当时认为:构造函数为类的成员

一些面试题,整理自网络,就不一一帖原址了

腾讯面试题:tcp三次握手的过程,accept发生在三次握手哪个阶段? 答accept发生在三次握手之后. 第一次握手:客户端发送syn包(syn=j)到服务器. 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个ASK包(ask=k). 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1). 三次握手完成后,客户端和服务器就建立了tcp连接.这时可以调用accept函数获得此连接.   const的含义及实现机制,比

Java常见面试题(含答案)

第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 abstract的,又被声明为final的.将变量或方法声明为final,可以保证它们在使用中不被改变.被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改.被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何

JAVA面试题集

基础知识: 1.C++或Java中的异常处理机制的简单原理和应用. 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常.违反语义规则包括2种情况.一种是JAVA类库内置的语义检查.例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException.另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常.所有的异常都是jav

PHP经典面试题集锦

 这篇文章主要介绍了PHP经典面试题集锦,搜集整理了常见的php面试题与相关的参考答案,供大家参考借鉴,需要的朋友可以参考下     本文较为详细的分析了PHP经典面试题.分享给大家供大家参考.具体如下: 做了一下网络上的php题目,不知不觉做到现在.....把答案贴出来,供参考之用. 1.用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分) ? 1 2 $a = date("Y-m-d H:i:s", strtotime("-1 day")

C++笔试题汇总(45题)

本文转自:<程序员必看c++笔试题汇总>,经过整理正文如下: 本文通过对程序员笔试过程的总结,对程序员c++笔试题进行了汇总.希望能与大家共同分享.下面是一些常见题型: 1.求下面函数的返回值(微软) { int countx = 0; while(x) { countx ++; x = x&(x-1); } return countx; } 假定x = 9999. 答案:8 思路:将x转化为2进制,看含有的1的个数. 2. 什么是"引用"?申明和使用"引

程序员必看 c++笔试题汇总

本文通过对程序员笔试过程的总结,对程序员c++笔试题进行了汇总.希望能与大家共同分享.下面是一些常见题型: 1.求下面函数的返回值(微软) {   int countx = 0;   while(x)   {   countx ++;   x = x&(x-1);   }   return countx;   }  假定x = 9999. 答案:8 思路:将x转化为2进制,看含有的1的个数. 2. 什么是"引用"?申明和使用"引用"要注意哪些问题? 答:引用

学生党如何拿到阿里技术offer: 《阿里巴巴常考面试题及汇总答案(Java方向)上篇》

之前和大家分享了几位学长学姐们在阿里面试的经验,他们其中有成功的,也有留下遗憾的.但是总之,我认为作为技术人员,首先打铁需要自身硬,在学校里不光要学精学透基础的专业知识,还要有过硬的编程能力,当然我们所谓的计算机软件的科班出身更不能将自己定位为所谓的程序而应该是软件攻城狮-这样我们要对自己有一个比较高的要求,记得有一个计算机大牛曾说过"Talk is cheap,show me the code!",的确与其空谈,不如实干,多看书,多思考,多动手编程,多参与项目实践. 好了,今天就不多