北京大学程序设计MOOC作业详解-02-类和对象基础(上)

北京大学程序设计MOOC作业详解-02-类和对象基础

第一题

在这里插入图片描述

第一题分析:

这个题考察点是:一个类的默认无参构造函数。一个类,如果不写有参/无参的普通构造函数,则会有一个默认的无参构造。但是如果写了有参/无参构造函数,那么就不会有这个默认的无参构造了。

然而,B,C和D选项均使用了无参构造,这是错误的,因此本题选A

第二题:

在这里插入图片描述

第二题分析:

首先,arr是一个指针数组,即数组内的元素均为指针。指针在没有调用new和构造函数的时候,只是一个空/野的指针变量,占固定的8个字节。只有new了才是实例化的对象。

这个数组里,只有两个new,因此只有两个对象,本题选C

第三题:

在这里插入图片描述

第三题分析:

这题考察:拷贝构造函数调用的时机,在不考虑优化的情况下,有以下时机会调用拷贝构造:

1)运用拷贝构造初始化对象时,即:A a2 = a1;,要注意这种情况:A a2; a2=a1;这里没有调用拷贝构造,而是调用了一次无参构造和一次赋值运算符。
2)函数传参传递了一个非引用/指针类型的实参,即:void func1(A a){} func1(a1);,这里可以看作:A a=a1;根据1)可知,调用拷贝构造。
3)函数返回值返回了一个非引用/指针类型的实参,即:A func2(){} A a1=func2();,根据1)可知,这也相当于A a1=a;

根据上述三种调用拷贝构造的时机,可以知道,本题选A。因为,A选项是无参构造+赋值运算符。但是B选项也不是很对,因为拷贝构造是运行时的,只有函数实现,没有函数调用,是不存在拷贝构造的

第四题:

在这里插入图片描述
在这里插入图片描述

第四题分析:

本题考察类型转换构造函数,什么叫类型转换呢?其实没有这种概念,一般就叫构造函数。需要注意explicit关键字,写了这个关键字就不支持类型转换构造了。比如:

class A {
private:
	int m_val;
public:
	A(int val) : m_val(val) {}
};

int main() {
	A a = 1;// 这里会调用类型转换构造,而并非拷贝构造匿名对象
	/*
		如果是:
		explicit A(int val) : m_val(val) {}
		那么就不支持:
		A a = 1;
	*/
	return 0;
}

这里会调用类型转换构造,而并非拷贝构造匿名对象。好了,言归正传,本题选项分析:
A选项:a3=9这行代码,包含两步,首先是调用赋值构造,得到A(9)的匿名对象,然后调用赋值操作函数,赋值给a3对象。
B选项:这里也可以说是调用赋值构造,因为赋值构造,本质就是一个普通的构造函数。
C选项:这是典型的赋值构造,和上面的代码例子是一样的。
D选项:第一行代码,有两次无参构造函数调用;第二行代码,调用赋值操作符函数,因此该选项没有调用赋值构造。

因此,本题选D

第五题:

在这里插入图片描述

第五题分析:

这个程序首先会调用delete[] p,这是2次析构,因为p是一个大小为2的指针数组,且里面2个元素均实例化(new A[2])。然后在作用域结束后,A a实例化的这个a变量会析构,又是1次。因此,调用3次析构,本题选C。需要注意,new出来的变量,必须delete析构,如果是new T[]则必须是delete[] 析构。

第六题:

在这里插入图片描述
在这里插入图片描述

第六题分析:

设计一个类,需要包括类的属性(成员变量)和方法(成员函数)。根据题目的输出要求可知,这个类要包含:姓名,年龄,学号和四年平均成绩。值得注意的是,四年平均成绩不一定是整数。即:姓名(name,string),年龄(age,int),学号(stuId, string),平均成绩(score,double)。然后方法就是题目给出的三个方法要实现。

但是,为了业务,可能还需要保留四年每一年的成绩,这需要增加四个成员变量。这个题建议用strtok分割字符串,分割字符串一直是C/C++的一个不足,明天再探索。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值