做自适应网站注意事项/苏州优化排名seo
一、前言
本部分为C++语言刷题系列中的第4节,主要讲解这几个知识点:构造函数、析构函数和类的使用。欢迎大家提出意见、指出错误或提供更好的题目!
二、知识点讲解
由以前知识可知,类的实现中包含成员变量和成员函数,而成员函数中又涉及两类特殊的函数:构造函数和析构函数。
2.1、构造函数
· 构造函数名称与类名相同,并且没有返回类型
· 只要根据类创建新对象,都会自动执行相应的构造函数
· 构造函数的主要作用是用来对成员变量进行初始化:为指针成员变量分配空间、对数据成员赋初值等
· 构造函数可以重载, 即可以存在多个形参列表不同的构造函数
· 当用户没有定义构造函数时,编译器会提供一个默认的构造函数:没有形参、函数体为空
class Date
{
private:
int month, day, year;
public:
Date() { day=1; month=1; year=1999; }
Date(int d) { day=d; month=1; year=1999; }
Date(int d, int m, int y) { day=d; month=m; year=y; }
};
2.2、析构函数
· 析构函数名为: ~ 类名
· 析构函数没有参数,也没有返回类型,仅有一个析构函数,不存在重载函数
· 当一个对象消亡的前一刻,系统自动调用析构函数
· 析构函数的作用是进行清除对象,释放内存等
· 用户没有定义析构函数时,系统提供缺省版本的析构函数
class Date
{
public:
~ Date(); //析构函数
};
2.3、类的使用
自定义的类,也就是一个自定的数据类型。数据类型的所有用途,类都具有:定义变量(创建对象)、定义数组(创建对象数组)、定义指针和引用。
Date d1; //调用构造函数1次
Date d1[10]; //调用构造函数10次
Date *d3, &d4=d1; //不调用构造函数
需要特别说明的是,创建对象和创建对象数组时,都会调用构造函数,而定义指针和引用时没有涉及新对象的创建,不调用构造函数。
三、试题解析
1.下列关于构造函数的叙述中,错误的是( )。
A.构造函数名与类名相同
B.构造函数可以有返回值
C.构造函数可以重载
D.每个类都有构造函数
答案:B
解析:构造函数的名字和类的名字相同,选项A正确;构造函数没有返回值,不能指定返回类型,选项B错误;构造函数可以被重载,选项C正确;每个类都有构造函数,如果类定义中不提供任何构造函数,那么编译器会在需要时,自动生成一个默认的构造函数,选项D正确。
2.下列叙述中,属于析构函数特征的是( )。
A.析构函数名与类名相同
B.析构函数只能在类体内定义
C.一个类中只能定义一个析构函数
D.析构函数可以有一个或多个参数
答案:C
案解析:析构函数名是在函数名前面加一个位取反符~,为了区别于构造函数;析构函数不能带任何参数,也没有返回值;一个类只能有一个析构函数,不能重载。如果用户没有提供析构函数,编译系统会自动生成一个缺省的析构函数,故答案为C选项。
3.有如下程序:
#include
using namespace std;
class Print
{
public:
Print() { cout<
};
void main()
{
Print a, *b=new Print, d[2];
delete b;
}
运行时输出的结果()
A.CCCC
B.CCC
C.CC
D.C
正确答案:A
解析:在main函数中,该类共创建了4个对象,因此会调用四次构造函数,故输出"CCCC",选A
30.有如下程序:
#include
#include
using namespace std;
class MyBag
{
public:
MyBag(string br="ABC"):brand(br){ cout<
private:
string brand;
};
void main()
{
_________________________
}
若运行时的输出结果不是"ABC ABC",则下划线处缺失的语句是()。
A. MyBag arrays[2];
B. MyBag* arrays=new MyBag[2];
C. MyBag arrays[2]={MyBag("ABC")};
D. MyBag arrays[2]={MyBag("ABC"),MyBag("Xxk")};
正确答案:D
解析:若要使运行时的输出结果不是"ABC ABC",则在创建对象时不要两个都使用默认值,或一个赋值"ABC",另一个使用默认值,一定要赋值一个其他值,故选D。
5.已知类MyClass定义如下:
class MyClass
{
int n;
public:
MyClass(int k) { n=k; }
};
给出如下4个数组定义:
MyClass x1[2];
MyClass x2[2]={new MyClass(1),new MyClass(2)};
MyClass *x3[2];
MyClass x4[2]={MyClass(1),MyClass(2)};
其中语法正确的有几个?
A.1个
B.2个
C.3个
D.4个
答案 B
解析:类MyClass具有一个带有参数的构造函数,因此编译器不会提供默认的构造函数。因此在对象数组x1和x4中,x1无法实例化,x4可以正确实例化。x2为对象数组,但其初始化的却是对象指针,因此不正确。x3为指针数组,不涉及到对像创建,因此也是对的。
四、试题测试
1.如果没有为一个类定义任何构造函数的情况下,下列描述正确的是( )。
A.编译器总是自动创建一个不带参数的构造函数
B.这个类没有构造函数
C.这个类不需要构造函数
D.该类不能通过编译
3、有如下类定义:
class Point
{
private:
int xx, yy;
Public:
Point() { xx=0; yy=0; }
Point(int x, int y) { xx=x; yy=y; }
};
若执行语句
Point a(2),b[3], *c[4];
则point类的构造函数被调用的次数是()。
A、2次 B、3次 C、4次 D、5次
------------------------------
欢迎大家提出意见、指出错误或提供更好的题目,只有大家的共同努力,才能帮助更多人掌握C++的基本概念,顺利通过考试!
