面向对象程序设计(C++)智慧树知到期末考试答案2024年_第1页
面向对象程序设计(C++)智慧树知到期末考试答案2024年_第2页
面向对象程序设计(C++)智慧树知到期末考试答案2024年_第3页
面向对象程序设计(C++)智慧树知到期末考试答案2024年_第4页
面向对象程序设计(C++)智慧树知到期末考试答案2024年_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计(C++)智慧树知到期末考试答案2024年面向对象程序设计(C++)student类中定义拷贝构造函数的正确写法为()。

A:student::student(studentstu)B:student::student(conststudentstu)C:student::student(student*stu)D:student::student(student&stu)答案::若一个类的成员函数前用static关键字修饰,则该成员函数()。

A:可以访问该类的所有成员B:只能用对象名来调用C:没有this指针D:可以被声明为const答案:没有this指针下列访问公有静态成员的方式,错误的是()。

A:对象指针.静态成员名B:对象名.静态成员名C:对象指针->静态成员名D:类名::静态成员名答案:对象指针.静态成员名对于"int*pa[5];"的描述中,正确的是()。

A:pa是一个具有5个元素的指针数组,每个元素是一个int型指针B:pa是一个指向数组的指针,所指向的数组是5个int型元素C:pa是一个指向某数组中第5个元素的指针,该元素是int型变量D:pa说明内联函数的关键字为[5]表示某个元素的第5个元素的值答案:pa是一个具有5个元素的指针数组,每个元素是一个int型指针对于拷贝构造函数和赋值操作的关系,正确的描述是()

A:进行赋值操作时,会调用拷贝构造函数B:拷贝构造函数和赋值操作不能再同一类中被同时定义C:当调用拷贝构造函数时,类的对象正在被建立并被初始化D:拷贝构造函数和赋值操作是完全一样的操作答案:当调用拷贝构造函数时,类的对象正在被建立并被初始化在类声明中直接实现的成员函数是()。

A:全局函数B:隐式内联函数C:重载函数D:显式内联函数答案:隐式内联函数对于类中定义的成员,其默认的访问权限为()。

A:protectedB:publicC:staticD:private答案:private一个类的友元函数或友元蕾能够通过成员操作符访问该类的()。

A:保护成员B:私有成员C:所有成员D:公有成员答案:所有成员两个以上的函数,具有相同的函数名,但是形参的个数或者类型不同,编译器根据不同特点,自动确定调用相应的函数,这就是()。

A:函数的重复定义B:运算符的重载C:函数的重载D:函数的多态答案:函数的重载在C++中,数据封装要解决的问题是()。

A:便于数据转换B:避免数据丢失C:防止不同模块之间数据的非法访问D:数据的规范化答案:防止不同模块之间数据的非法访问下列对静态数据成员的描述中,正确的是()。

A:类的每个对象都有自己的静态数据成员B:静态数据成员不能通过类的对象调用C:静态数据成员是类的所有对象共享的数据D:类的不同对象有不同的静态数据成员答案:静态数据成员是类的所有对象共享的数据运算符重载的关键字是()。

A:operatorB:operationC:operateD:operand答案:operator在公用继承方式下,有关派生类对象和基类对象的关系,不正确的叙述是()。

A:派生类的对象可以直接访问基类中的成员B:派生类的对象可以初始化基类的引用C:派生类的对象可以赋给基类的对象D:派生类的对象的地址可以赋给指向基类的指针答案:派生类的对象可以直接访问基类中的成员下面对模板的声明,正确的是()。

A:templateB:templateC:templateD:template答案:template说明内联函数的关键字为()。

A:inlineB:virtualC:staticD:enum答案:inline对基类和派生类的关系描述中,错误的是()。

A:派生类是基类定义的延续B:派生类是基类的特殊化C:派生类是基类的具体化D:基类继承了派生类的属性答案:派生类是基类定义的延续友元关系不能()。

A:是类是与类的关系B:是继承关系C:是一个类和函数的关系D:是一个类成员函数与另一个类的关系答案:继承下列情况中,不会调用拷贝构造函数的是()。

A:函数的形参是类的对象,调用函数进行形参和实参结合时B:函数的返回值是类的对象,函数执行返回调用时C:用一个类对象去初始化该类的另一个新对象时D:将类的一个对象赋值给该类的另一个对象时答案:将类的一个对象赋值给该类的另一个对象时下列哪个类型函数不适合声明为内联函数()。

A:函数执行时间较短B:函数执行时间过长C:函数体语句较少D:函数体语句较多答案:函数体语句较多下列关于类与对象的说法中,不正确的是()。

A:一个类只能有一个对象B:对象是类的一个实例C:类与对象的关系和数据类型与变量的关系相似D:任何一个对象只能属于一个具体的类答案:一个类只能有一个对象下面有关重载函数的说法中正确的是()。

A:重载函数必须具有不同的返回值类型B:重载函数必须有不同的形参列表C:重载函数名可以不同D:重载函数形参个数必须不同答案:重载函数必须有不同的形参列表以下不属于类的访问权限的是()。

A:protectedB:publicC:staticD:private答案:static在一个类中,可以对一个操作符进行()重载。

A:3种以下B:多种C:2种以下D:1种答案:多种C++语言建立类族是通过()实现的。

A:类的继承B:虚函数C:抽象类D:类的嵌套答案:类的继承重载的运算符<A:对B:错答案:对C++中引入的友元机制没有破坏封装性。()

A:错B:对答案:错构造函数可以指定返回类型,而析构函数不能指定任何返回类型。()

A:对B:错答案:错若派生类的成员函数不能直接访问基类继承过来的某个成员,则该成员一定是基类中的私有成员。()

A:对B:错答案:对以下类的声明不存在语法问题。classTime{public:Time(){h=10;m=50;s=0;}Time(inthour=10;intmin=50;intsec=0){h=hour;m=min;s=sec;}private:inth,m,s;};()

A:错B:对答案:错C++会在编译阶段针对每个程序单元生成一个目标文件。()

A:错B:对答案:对静态成员函数可以被声明为虚函数。()

A:对B:错答案:错抽象类中可以没有纯虚函数,但至少要包含一个虚函数。()

A:错B:对答案:错动态多态性可通过模板和虚函数实现。()

A:对B:错答案:错单目运算符作为类成员函数重载时可以不包含形参。()

A:正确B:错误答案:错误对象数组的元素可以是不同类的对象。()

A:正确B:错误答案:错误私有继承时,基类中只有公有成员在派生类中可见。()

A:正确B:错误答案:错误友元成员函数在类内只能被public控制符修饰。()

A:对B:错答案:错使用输出文件流对象的open函数打开文件,失败时返回0。()

A:错B:对答案:对当一个类的某个函数被virtual修饰后,在后续派生类中与该函数同名的函数都成为虚函数。()

A:错误B:正确答案:错误若表达式x*y中“*”是作为友元函数重载的运算符,则operator*有2个参数。()

A:错B:对答案:对使用open函数打开文件之前,需要首先定义流类对象。()

A:对B:错答案:对使用类模版可以减少重复编码,提升编程效率。()

A:错B:对答案:对C++中打开一个文件就是将该文件与一个流建立关联。()

A:对B:错答案:对重载“+”运算符时,可以声明为类的()。

A:友元函数B:虚函数C:成员函数D:纯虚函数答案:成员在派生类中重新定义虚函数时,()必须与基类中相应的虚函数保持一致。

A:参数类型B:参数个数C:函数名称D:函数体答案:参数个数###参数类型###函数名称在C++中不能被重载的运算符有()。

A:“.”B:“?:”C:“::”D:“&&”E:“*”答案:::关于多继承二义性的描述中,正确的是()。

A:基类和派生类中同时出现的同名函数,也存在二义性问题B:一个派生类是从两个基类派生出来的,而这两个基类又有一个共同的基类,对该基类成员进行访问时可能出现二义性C:一个派生类的两个基类中都有某个同名成员,在派生类中对这个成员的访问可能出现二义性D:解决二义性最常用的方法是对成员名的限定法答案:基类和派生类中同时出现的同名函数,也存在二义性下面的描述中,符合赋值兼容规则的是()。

A:派生类的对象可以初始化基类的引用B:派生类的对象的地址可以赋值给基类的指针C:派生类的对象可以赋值给基类的对象D:基类的对象可以赋值给派生类的对象答案:基类的对象可以赋值给派生类的对象实现运行时多态要满足的条件有()。

A:在派生类中对虚函数进行了重新定义B:要有一个继承层次C:在基类中定义了虚函数D:要通过基类的指针或引用来调用虚函数答案:虚函数派生层次中可以被继承的有()。

A:转换函数B:静态成员函数C:构造函数D:虚函数答案:转换函数###虚函数###静态成员函数以下属于类的成员函数的是()。

A:静态成员函数B:析构函数C:友元函数D:构造函数答案:静态成员函数###构造函数###析构函数派生类中定义的虚函数必须与基类中相同的部分是()。

A:参数个数B:函数体C:函数名称D:参数类型答案:参数类型###参数个数###函数名称以下关于对象数组的描述正确的是()。

A:对象数组的数组名是一个常量指针B:对象数组在创建时可以同时初始化C:对象数组中的每一个元素都是同类或派生层次中类的对象D:对象数组的下标都是从0开始的答案:对象数组的下标都是从0开始的###对象数组的数组名是一个常量指针###对象数组中的每一个元素都是同类或派生层次中类的对象###对象数组在创建时可以同时初始化基类的公有成员在派生类中仍然是公有的。()

A:错误B:正确答案:错误含有纯虚函数的类是不可以用来创建对象的,因为它是虚基类。()

A:对B:错答案:错类型兼容规则也适合于多继承。()

A:对B:错答案:错在根类中,成员存在4种访问级别:公有、私有、保护和不可访问。()

A:错B:对答案:错类型兼容规则也适合于私有派生。()

A:对B:错答案:错析构函数在对象生存期即将结束时被自动调用。()

A:错误B:正确答案:正确基类的公有成员,在公有派生类中仍然是公有的。()

A:错误B:正确答案:错误假设有语句:voidfunc(int*m,long&n);inta;longb;则下列调用合法的是()。

A:func(a,b)B:func(a,&b)C:func(&a,b)D:func(&a,&b)答案:AI参考:正确答案是B:func(a,&b)。\n在C++中,函数调用需要满足以下条件:1.参数类型和数量必须与函数定义中声明的一致;2.如果是指针或引用类型,必须保证参数能够被正确传递;3.如果涉及到对象的引用,需要确保对象的生命周期不被提前结束。选项A中,参数类型不匹配,不能调用;选项C中,第一个参数是a的地址,但是func函数定义中并没有声明接受指针类型的参数;选项D中,第一个参数是a的地址,第二个参数是b的引用,但是func函数定义中声明的是int*m和long&n,两者不匹配。只有选项B中,第一个参数是a的副本,第二个参数是b的引用,满足调用要求。因此,选项B是正确的调用方式。'C++中设置this指针是为了()。 

A:保证基类私有成员在子类中可以被访问B:保证基类保护成员在子类中可以被访问 C:保证基类公用成员在子类中可以被访问 D:区分不同对象拥有的数据成员,但共享这些处理数据成员的代码 答案:AI参考:在C++中,this指针的主要作用是用来指向当前对象的。它主要用于在子类中访问基类的成员。当一个成员函数被调用时,它会自动传入当前对象的指针,这个指针就被称为this指针。对于选项A和B,这两个选项描述的是基类的私有和保护成员在子类中的访问问题,但是C++中的访问修饰符私有和保护是用来限制成员的可访问性的,不会影响基类的成员在子类中的可见性,因此这两个选项不正确。对于选项D,虽然this指针的确可以用来区分不同对象拥有的数据成员,但是这个功能并不是设置this指针的初衷,因为基类的成员在子类中都是可见的,没有必要通过this指针来区分数据成员。所以选项C“保证基类公用成员在子类中可以被访问”是正确答案。这是因为公用成员在C++中是可以被子类继承并修改的,设置this指针可以让子类中的成员函数更方便地访问和操作这些公用成员。'公有派生时,下列关于派生类对象和基类对象的描述不正确的是()。

A:派生类对象可以初始化基类的引用B:派生类类内可以访问基类中的成员C:派生类对象的地址可以赋值给指向基类的指针D:派生类对象可以给基类对象赋值答案:AI参考:"单选题"关于派生类对象和基类对象的描述不正确的是:D:派生类对象可以给基类对象赋值。\n\n解释:D选项描述错误,因为派生类对象和基类对象是两种不同的对象,它们之间没有赋值关系。派生类对象包含了基类的成员和自己的成员,而基类对象只包含自己的成员。因此,派生类对象不能直接赋值给基类对象。其他选项都是正确的描述,派生类对象可以初始化基类的引用,派生类类内可以访问基类中的成员,派生类对象的地址可以赋值给指向基类的指针。'基类中将函数area声明为纯虚函数的正确写法为()。

A:virtualfloatarea(){};B:floatarea()=0;C:virtualfloatarea()=0{};D:virtualfloatarea()=0;答案:AI参考:正确选项为B:floatarea()=0;\n\n在C++中,纯虚函数必须定义在基类中,但没有具体实现。纯虚函数的声明必须以“=0”结尾,并且返回值类型必须为浮点数。所以选项B是正确的写法。选项A中的返回类型应该为float,但没有写明是纯虚函数;选项C和D中的括号内多了一个花括号,这是错误的。因此,正确选项为B。'若要将类B的成员函数func声明为类A的友元,则应该()。

A:在类A中加入语句friendvoidA::func();B:在类B中加入语句friendvoidA::func();C:在类B中加入语句friendvoidB::func();D:在类A中加入语句friendvoidB::func();答案:AI参考:正确答案是B:在类B中加入语句friendvoidA::func();。\n\n在C++中,友元函数和友元类都是用于增强类之间的交互,但是他们的使用方式和规则是不同的。对于成员函数的友元,需要明确指定是哪个类的成员函数,所以应该是在类B中加入语句friendvoidA::func();。这样,类A的成员函数func就可以访问类B的私有和受保护成员了。而选项A和D都是错误的,因为他们没有明确指定是哪个类的成员函数。选项C也是错误的,因为友元函数不能直接访问另一个类的成员变量,只能访问成员函数。'在下列运算符中,不能重载的是()。

A:!B:newC:sizeofD:delete答案:AI参考:正确答案是B:new。\n在C++中,运算符重载需要满足以下条件:运算符必须是对类的成员运算符;运算符必须具有一个参数;运算符重载的参数类型必须与运算符的参数类型一致;运算符重载不能改变运算符的语义。new和delete是C++中用于内存分配和释放的关键字,不能被重载。因此,答案为B选项。'函数模板template<classT>中的T可看作是()。

A:函数形参B:函数实参C:模板形参D:模板实参答案:AI参考:正确选项是C:模板形参。\n\n在函数模板中,template中的T通常被视为模板形参,它代表了一个通用的类型参数。在函数调用时,可以根据需要为这个模板形参指定具体的类型。因此,选项C是正确的。选项A、B和D都不正确,因为它们分别描述了函数形参、函数实参和模板实参,这与函数模板中的T的含义不符。'下列函数原型中,满足函数重载规则的是()。

A:floatfunc(floata,inty);voidfunc(floatb)B:floatfunc(floata);voidfunc(floatb)C:floatfunc(floata);floatfunc(floatb)D:floatfunc(floata);voidfunc(floatb)答案:AI参考:正确答案是B:floatfunc(floata);voidfunc(floatb)。\n\n函数重载是指在同一作用域内,可以有多个同名函数,它们的参数列表(参数个数或参数类型)应不同。根据题目给出的选项,只有B选项符合这个规则,因为第一个函数是只有一个float类型的参数,而第二个函数有两个float类型的参数。其他选项中的函数原型都不满足函数重载规则。'基类中声明的虚函数,在派生类中()。

A:无法继承该虚函数B:只有重新加virtual定义才是虚函数C:即使不加virtual声明,也会自动继承该虚函数D:若没有重新定义,则不是虚函数答案:AI参考:正确选项是C:即使不加virtual声明,也会自动继承该虚函数。\n\n在C++中,基类中的虚函数如果没有被派生类继承,那么在派生类中这个函数就会消失。但是,如果基类中的虚函数被派生类继承了,那么派生类中的这个函数就是基类中的虚函数的等价物。即使在派生类中没有重新定义这个函数,它仍然是虚函数。因此,选项C是正确的。选项A和B都是错误的,因为虚函数的定义必须使用virtual关键字。选项D也是错误的,因为即使没有重新定义,如果基类中的虚函数被派生类继承了,那么它仍然是虚函数。'若一个类中包含至少一个纯虚函数,那么该类就是()。

A:具体类B:其余选项都不对C:抽象类D:派生类答案:AI参考:正确选项是C:抽象类。\n\n一个类中包含至少一个纯虚函数,就表示该类是一个抽象类,不能被实例化,只能被继承。因此,选项C是正确答案。选项A、B、D都不符合题意。'C++中预处理命令在程序中以()开头。

A:#B://C:&D:*答案:AI参考:正确答案是A:#。在C++中,预处理命令通常以“#”开头。预处理命令在程序编译之前进行一些处理,例如包含头文件、宏定义等。B、C、D选项中的“//”、“&”和“*”都不是预处理命令的常见开头字符。'C++语言中的封装性可以()。

A:实现数据共享B:避免模块之间数据的非法访问C:实现数据的规范化D:保护数据不被丢失答案:AI参考:在C++语言中,封装性可以用于实现数据的保密性,即避免模块之间数据的非法访问。封装是面向对象编程中的一个重要概念,它将数据(属性)和操作数据的函数(方法)捆绑在一起,形成一个独立的单元。通过封装,我们可以控制对数据的访问,防止未经授权的访问和修改,从而保护数据的安全。因此,答案为B:避免模块之间数据的非法访问。'一个可正常运行的C++源程序()。

A:仅能包含一个主函数B:可以不包含普通函数仅由一个主函数构成C:可以由一个或多个主函数构成D:必须由一个主函数和一个以上的普通函数构成答案:AI参考:正确答案是A:仅能包含一个主函数。一个可正常运行的C++源程序必须仅包含一个主函数,且主函数必须作为程序的入口点。其他选项都与C++语言的规定不符。B选项和C选项都包含错误,D选项则包含一个以上普通函数,这也不符合C++语言的规定。因此,正确答案是A。'若对后置单目运算符“++”进行重载,相当于进行如下哪项函数调用()。

A:a.operator++()B:operator++()C:a.operator++(a,0)D:operator++(a,0)答案:AI参考:正确答案是D:operator++(a,0)。\n后置单目运算符“++”在重载时需要两个参数,第一个参数是一个引用,用于修改原对象的状态;第二个参数是零,用于实现前置自增的功能。选项中只有D符合要求。其他选项都不完整。所以正确答案为D。'对一个抽象类,不能声明()。

A:抽象类的指针B:抽象类的引用C:抽象类的对象答案:AI参考:正确选项是【C:抽象类的对象】。\n\n抽象类是一种特殊的类,它不能被实例化,只能被用来创建子类。因此,不能声明抽象类的对象。而抽象类的指针和引用可以指向抽象类的实例,以便对其进行操作。因此,选项A和B都是正确的。'类的静态数据成员()

A:不一定要初始化,必要时通过构造函数进行B:必须通过构造函数的初始化列表初始化C:可以在构造函数中进行初始化D:只能在类体外进行初始化答案:AI参考:正确选项是【B:必须通过构造函数的初始化列表初始化】。\n\n静态数据成员属于类本身,而不是类的对象,因此初始化必须在构造函数中进行,且必须通过构造函数的初始化列表进行初始化,不能在构造函数体内部进行初始化。这是因为静态数据成员在类加载时就分配了内存,需要在构造函数中进行初始化并赋值。而构造函数的主要目的是为新创建的对象初始化成员变量,因此需要在构造函数中完成静态数据成员的初始化。因此选项B是正确的。选项A、C、D都是不正确的。'下列运算符中,不可以重载的运算符是()

A:()B:::C:[]D:=答案:AI参考:在C++中,可以重载的运算符包括()(函数调用运算符),:::(范围选择器),[](数组访问或成员选择器),但不可以重载的运算符是:=,这是赋值运算符,它是C++中的内置运算符,不能被重载。因此,正确答案是D:=。'以下说法错误的是()。

A:类中非静态成员函数可以直接访问静态的和非静态数据成员B:通过将模块A声明为模块B的友元,模块A能够引用到模块B中本是被隐藏的信息C:友元函数是在类声明中由关键字friend修饰说明的该类的成员函数D:若类A为类B的友元,则类A的所有成员都能访问类B的私有成员答案:AI参考:正确答案是A:类中非静态成员函数可以直接访问静态的和非静态数据成员。\n\n解释:在C++中,非静态成员函数只能直接访问其所在类的静态和非静态数据成员,不能直接访问其他类的静态和非静态数据成员。这是因为非静态成员函数需要对象作为参数,因此必须与对象绑定,而静态成员则无需绑定到特定的对象上。所以选项A错误。其他选项B、C和D都是正确的。因此,本题答案为A。'类的非静态数据成员的共享范围是()。

A:类的一个对象B:类声明文件C:整个源文件D:类的所有对象答案:AI参考:正确选项是D:类的所有对象。\n\n类的非静态数据成员是属于类的所有对象共享的,而不是属于某个特定的对象。这意味着当创建类的多个对象时,这些对象的非静态数据成员将共享相同的值。因此,类的所有对象都能够访问和修改非静态数据成员。'常成员函数只能被常对象调用,而不能被普通对象调用。()

A:对B:错答案:AI参考:答案是B:错。\n\n常成员函数可以在普通对象和非常对象之间调用,因为它可以在声明时使用关键字"const"修饰成员函数,表示该成员函数不会修改类的任何成员变量。但是,如果常成员函数被声明为const成员函数,则只能被常对象调用,不能被普通对象调用。因此,这个说法是错误的。'类的普通成员函数可以()。

A:重载B:不写返回类型C:带缺省参数D:定义成内联函数答案:AI参考:正确选项为:BCD\n\n类的普通成员函数可以:\n\n1.不写返回类型(B对):成员函数没有返回值,所以不需要写返回类型。\n2.带缺省参数(C对):在C++中,普通成员函数可以带参数,也可以有缺省参数。\n3.定义成内联函数(D对):C++允许在类中定义成员函数为内联函数,这可以提升程序的执行效率。\n\n需要注意的是,成员函数不能被重载(A错)。因此,答案为BCD。'下面描述正确的是()。

A:对基类成员的访问必须是非二义性的B:基类成员的访问能力在派生类中保持不变C:派生类可以使用private派生D:赋值兼容规则也适用于多层继承结构答案:AI参考:正确选项为:B:基类成员的访问能力在派生类中保持不变,C:派生类可以使用private派生。\n\nA选项中,基类成员的访问权限可以是private、protected或public,因此A选项错误。D选项中,赋值兼容规则只适用于同一层次之间的继承结构,多层继承结构中需要进行逐层赋值,因此D选项错误。B选项和C选项是正确的,基类成员的访问能力在派生类中保持不变,派生类可以使用private派生。B选项描述了基类成员的访问权限在派生

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论