第七章:构造函数面试题目专题

本文主要探讨了关于C++构造函数的各种面试题目,包括错误的构造函数初始值修复、Sale_data类的构造函数使用、默认构造函数的必要性、类成员设计、委托构造、默认构造函数的作用、构造函数的合法性、明确性(explicit)构造函数的使用场景、以及不同类型的构造函数在实际操作中的应用。同时,文章还涉及了vector和string在构造函数上的差异,以及字面值类型类的相关知识点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、下面初始值是错误的,请找出问题所在并尝试修改它。

    struct X
    {
        X(int i,int j):base(i),rem(base%j){ }
        int rem,base;
    }
    
   解析:     
	此类问题经常考察的知识点为:
	知识点1:类内成员是const、引用时或者使用某种类类型没有默认构造函数的成员时必须将其初始化。
	知识点2:初始化和赋值是不等价的。
	知识点3:成员初始化的顺序一般是没有要求的,但是若用一个成员来初始化另一个成员是,就必须考虑到其定义时的顺序(写时保持顺序一直即可)。
	答案为;此题出现了知识点3中的问题:用一个成员来初始化另一个成员,没有考虑顺序问题。

二、使用本节提供的Sales_data类,确定初始化下面的变量时分别使用了哪些构造函数,然后罗列出每个对象所有数据成员的值。

 Sales_data first_item(cin);
 int main()
 {
      Sales_data next;
      Sales_data last("9-999-99999-9");
 }
 解析: 答案:第一个调用的是第三种构造函数;第二个调用的是默认的构造函数(默认参数已经在237页的代码中设定);
       第三种调用的是第一种构造参数。
       本题目引申出来的知识点为:构造函数的特点(1)构造函数的名子必须和类名相同,不能任意命名; (2) 构造函数没有返回值; (3)构造函数可以被重载,但是每次对象创建时只会调用其中的一个。
       我们需要注意的是:可以将构造总结为以下几类,不同入参决定调用不同的构造函数,它们分别是**普通构造函数** 、**默认构造函数** 、**拷贝构造函数** 、**转换构造函数**;分别学习一下以下构造函数。
       
       1.普通构造函数
       数普通构造函数是最为常见的构造函数,它没有特殊的特点,其函数形参参数可有多个,其函数原型和测试代码如下:
       
										//普通构造函数原型
										CComplex(int nReal, int nImag);
										//测试代码
										//需要指定参数
										CComplex num1(1,1);
										num1.PrintComplex();
	   2. 默认构造函数
	  相对于普通构造函数而言,默认构造函数是指用户可以指定实参值,也可以不指定实参值,不指定实参值,系统就使用默认的值,
	  而且默认构造函数只可以有一个,否则有歧义;默认构造函数原型和测试代码如下:

										//默认构造函原型声明
										CComplex();   //默认构造函数形式1,这里选择形式1
										CComp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N1314N

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值