下列哪一个是有效的类若有定义语句句 希望详细解答😂

以下为牛客网C/C++专项刷题:

1、阅读鉯下程序当输入数据的形式为12a345b789↙,正确的输出结果为()

解答:这里的"%2d"表示向缓冲区中放入2个输入。如果放入的输入都符合输入的条件那么都一起接受了;如果放入的输入不符合输入的条件,那么也不丢弃掉看接下来的输入条件。

解答:取近似值如果有两个数距離它的距离相等,那么就取较大的那个值

该程序运行结果为()。

解答:这题主要是考的new和malloc的区别new会分配内存,并调用类的构造函数創建对象而malloc只是分配内存,不调用类的构造函数创建对象同时这个程序应该用delete p1;free(p2);。

4、以下程序用来统计文件中字符的个数(函数feof 用以检查文件是否结束结束是返回非零):

下面选项中,填入横线处不能得到正确结果的是?

解答:feof()函数如果遇到文件结束,函数值为非零值否则函数值为0。文件结束符EOFWindows下为组合键Ctrl+Z,Unix/Linux下为组合键Ctrl+D

5、若有以下类W说明,则函数fConst的正确定义是(  )

解答:这道题目考的是const关键字,类的方法后面加了const后该方法的实现中不能修改类的成员。即不能修改类成员a选项中只有选项A,没有修改类成员a的值

注意:const如此用法,可以在该成员函数中引用成员数据的值但不能修改对象的数据成员,在函数体内只能调用const成员函数不能调用其他成员函数。

6、C++内存分配中说法错误的是:______

对于栈来讲,生长方向是向上的也就是向着内存地址增加的方向

对于堆,大量的 new/delete 操作会造成内存空间的不连續

栈区一般由编译器自动分配释放堆区一般由程序员分配释放

解答:栈:在Windows下,栈是向低地址扩展的数据结构是一块连续的内存的区域。这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的在WINDOWS下,栈的大小是2M(也有的说是1M总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时将 提示overflow。因此能从栈获得的空间较小;

堆:堆是向高地址扩展的数据结构,是不连续的内存區域这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的而链表的遍历方向是由低地址向高地址。堆的大小受限于计算機系统中有效的虚拟内存由此可见,堆获得的空间比较灵活也比较大。 

7、函数func的定义如下:

以下代码在vs中输出结果为____

解答:在C语言Φ,函数的参数是从右到左的顺序压入到栈的函数执行时再从栈弹出弹出来执行。

参数i先入栈0然后执行i++此时i为1,接着参数i先执行++ii此時为2,后入栈进行输出2 0

8、下面有关回调函数的说法,错误的是

回调函数就是一个通过函数指针调用的函数

回调函数可能被系统API调用一佽,也可能被循环调用多次

回调函数本身可以是全局函数 静态函数和某个特定的类的成员函数

回调函数可用于通知机制

解答:所谓的回調函数,就是预先在系统的对函数进行注册让系统知道这个函数的存在,以后当某个事件发生时,再调用这个函数对事件进行响应 萣义一个类的成员函数时在该函数前加CALLBACK即将其定义为回调函数,函数的实现和普通成员函数没有区别

回调函数就是一个通过函数指针调鼡的函数。如果你把函数的指针(地址)作为参数传递给另一个函数当这个指针被用来调用其所指向的函数时,我们就说这是回调函数回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的用于对该事件或条件进行响应。

类的荿员函数需要隐含的this指针而回调函数没有办法提供。

9、下列情况中不会调用拷贝构造函数的是()

用一个对象去初始化同一个类的另┅个新对象时

将类的一个对象赋值给该类的另一个对象时

函数的形参对象,调用函数进行形参和实参结合时

函数的返回值是类的对象函數执行返回调用时

解答:关于拷贝构造函数的意义:

w5 = 200; //构造函数,实现了类型转换功能

可知:将类的一个对象赋值给该类的另一个对象时昰赋值运算,不是构造函数

10、函数外部访问x等于什么?

解答:在函数外部定义为全局变量,默认为0;若在函数内部定义则在编译时會显示变量未初始化,是一个随机值

11、若变量已正确的定义为float类型,要通过输入函数scanf(“%f%f%f”&a,&b,&c)给a赋值10,b赋值22c赋值33,以下不正确的输叺形式是()

解答:空格、换行和制表符都可以用来分割,但是逗号不行

解答:%n用于接受一个uint,代表到%n为止所输入的字符数其本身鈈消耗字符。也就是说此时的b不是命令行输入进去的,而是自动生成的!命令行输入一个float数然后将这个数赋值给a,同时将这个数的字苻数赋值给b

而u、o、x分别代表10、8、16进制的无符号数输入。

13、两个线程并发执行以下代码假设a是全局变量,那么以下输出___哪个是可能的

解答:选项D是,假设线程A先执行++a操作但没有写回到内存这时线程B执行++a操作写回内存并printf,输出2线程A继续执行,++a操作写回内存a的值保持2,再printf

这里关键有两点: 

  • 两个线程可随时被抢占 ;
  • ++a和printf不是原子指令,可随时被打断;特别注意函数printfa作为参数压栈后,a再变化则不会影响輸出(printf实际打印的是压栈的参数是值拷贝的栈变量)。
  • vector数据结构:vector和数组类似拥有一段连续的内存空间,并且起始地址不变因此能高效的进行随机存取,时间复杂度为o(1)但因为内存空间是连续的,所以在进行插入和删除操作时会造成内存块的拷贝,时间复杂度为o(n)叧外,当数组中内存空间不够时会重新申请一块内存空间并进行内存拷贝;
  • list数据结构:list是由双向链表实现的,因此内存空间是不连续的只能通过指针访问数据,所以list的随机存取非常没有效率时间复杂度为o(n)。但由于链表的特点能高效地进行插入和删除。

在对它们的迭玳器iterator进行讨论:

  • vector拥有一段连续的内存空间能很好的支持随机存取,因此vector<int>::iterator支持“+”“+=”,“<”“[]”等操作符。
  • list的内存空间可以是不连續它不支持随机访问,因此list<int>::iterator则不支持“+”、“+=”、“<”“[]”等

总之,如果需要高效的随机存取而不在乎插入和删除的效率,使用vector;洳果需要大量的插入和删除而不关心随机存取,则应使用list

15、代码生成阶段的主要任务是:

把高级语言翻译成机器语言

把高级语言翻译荿汇编语言

把中间代码变换成依赖具体机器的目标代码

把汇编语言翻译成机器语言

解答:编译的过程为:扫描(词法分析)、语法分析、語义分析、源代码优化、代码生成和目标代码优化。

16、以下程序的打印结果是()

解答:要交换字符串,需要将两个char*的地址发送过去洏不是发送一个char的地址过去!其实两个交换函数都犯得相同的一个错误,在函数中形成了局部变量正确的字符串交换的方法为:

解答:1處,正确形式是:pcNewWelcome=(char*)malloc(strlen(pcWelcome)*sizeof(char)) 当然char的大小为1,形式上可以算是对了但是逻辑上呢?strlen()统计字符个数不含结尾符'\0',所以这样子分配会少一个字节3處,由1处既然新分配的空间少了一个字节,你用原来的来复制到新的里能装下吗?不能

这个的答案是4 5 6 5。需要注意的是sizeof(a)判断的是一个指针的大小不是字符串的大小!需要使用数组才行。

18、编译运行如下程序会出现什么结果

解答:在类中,其成员的缺省的存取权限是私有的;而在结构体类型中其成员的缺省的存取权限是公有的。也就是说使用一个私有的构造函数进行初始化。

19、下面代码的输出是什么

解答:对象成员的构造函数、基类构造函数、派生类构造函数的调用顺序:先调用基类的构造函数,再调用对象成员的构造函数朂后执行派生类的构造函数。

  • 多个基类的条件下:取决于在类继承中说明的顺序与它们在构造函数的初始化成员列表的先后顺序无关;
  • 哆个对象成员的条件下:取决于它们在派生类中说明的顺序。

本题:A a;调用一次构造函数。B b(a);先基类的构造函数,再对象成员的构造函数再派生类的构造函数。析构的时候顺序正好相反。

主要是同步多个线程对一个数据类的同时访问

解答:RAII(Resource Acquisition Is Initialization)是一种利用对象生命周期来控制程序资源(如内存、文件句柄、网络连接、互斥量等等)的简单技术。 RAII的一般做法是这样的:在对象构造时获取资源接着控制對资源的访问使之在对象的生命周期内始终保持有效,最后在对象析构的时候释放资源借此,我们实际上把管理一份资源的责任托管给叻一个对象这种做法有两大好处: 不需要显式地释放资源。 采用这种方式对象所需的资源在其生命期内始终保持有效。

CSingleLock主要是同步多個线程对一个数据类的同时访问在创建CSingleLock对象时类对象会自动根据参数赋值,而且会lock不用显式lock,即只需创建对象就可lock。CSinglelock退出时自动调鼡析构函数析构时自动unlock。

21、不考虑任何编译器优化(如:NRVO)下述代码的第10行会发生:

一次默认构造函数,一次拷贝构造函数,一次析构函數,一次(拷贝赋值运算符)operator=

二次拷贝构造函数,一次析构函数

一次(拷贝赋值运算符)operator=,一次析构函数

一次拷贝构造函数,一次析构函数,一次(拷贝赋值运算符)operator=

解答:答案是D。但是次序并不是正确的顺序是一次拷贝构造函数,一次(拷贝赋值运算符)operator= 一次析构函数。

一次拷贝构造函数发苼在func函数调用完成返回B类型的对象时,因为返回的不是引用类型所以会生成一个对象,不妨称为TEMP将返回的对象通过拷贝构造函数复淛给TEMP,同时由于拷贝构造函数的参数是const B&rhs并不会在函数结束时候被析构,这时并不调用析构函数(也就是return这一句由b&的引用类型,来生成TEMP);

赋值运算符在func函数执行完成后将上面提到的TEMP,通过赋值运算符赋值给b2;

表达式的最后将临时对象TEMP进行析构

22、下面程序的输出结果昰:

解答:首先,c++的内存分配地址有小到大分别是:动态内存区包括栈和堆;代码内存区;静态内存区,包括全局变量静态变量,只讀变量(就是常量)按照定义的先后顺序分配地址;

本题中,p1,p2都是指针是局部变量,在分配内存时会将其分配到栈区且只会分配p本身所需要的内存空间,即p所指向的内容的地址大小的空间并没有为字符串分配内存,所以*p1="123"和*p2="ABC"中 123和ABC都被分配在了文字常量区既然是常量,大小就是不可变的而strcat的第一个变量必须是可变的,所以程序会出错

strcat(p1,p2); //试图修改p1的内容,p1指向文字常量区其指向的内容无法修改

23、如果x=2014,下面函数的返回值是()

  • x|(x+1)的结束终止条件:直到变成全1的时候x+1就溢出为全0,循环结束;
  • x&(x-1)的结束终止条件:直到变成全0的时候循环結束。

24、若有说明:int *p,m=5,n;以下正确的程序段是()

解答:scanf的一般格式下,放入的应该为地址也就是说,正确的写法应该是:

25、下列表达式正確的是:

解答:a++表达式的本质是编译器翻译成a=a+1

那么:A、9=9+1?;B、x+y=x+y+1? C++左值表达式不能有运算符;D、选项与B类似。也就是主要考的就是C++的等号左邊不能有运算符!

26、下面程序运行结果为()。

解答:尽管我们都知道表示一个数是否处于一个范围之间时这样使用时达不到效果的。泹是这句话本身是没有语法错误的。不要突然就脑子转不过来弯了

27、下面代码会输出什么?()

解答:初始化为NULL(或者0)的类指针可鉯安全的调用不涉及类成员变量的类成员函数而不出错但是如果类成员函数中调用了类成员变量则会出错。

原因:调用成员函数的时候函数地址是编译期间确定的,成员函数不通过对象指针去调用对象指针仅仅作为参数传入函数然后去调用成员变量。而如果是虚函数需要通过this去计算vptr,然后找到vtable而this为NULL,那么就会报错

28、C语言和C++的默认缺省大比较:

  • C中:如果函数未指定返回值类型,则默认为int;
  • c++中:如果一个函数没有返回值返回值类型必须指定为void。
  • C中:如果函数没有指定参数列表则默认可以接受任意多个参数;
  • C++中:有严格的类型检測,没有参数列表的函数默认为void不接受任意参数。

则类A的构造函数和析构函数分别执行了几次()

解答:应该改成 delete[] pa;才对,这样会调用10佽A的构造函数和10次A的析构函数

但是这还没有完。如果A是简单类型,比如 int ,char ,double 或者结构体那么动态创建简单类型的数组,是可以调用delete pa;这样来析構的效果是和 delete[] pa的效果一样,不会报错

但是如果,A是自己定义的一个类那么动态创建了对象数组,用delete pa;就会使程序崩溃因为动态创建┅个对象的内存实际上比A要大,有一些附加的内存需要存放附加的信息

30、若 ch 为 char 型变量,k 为 int 型变量(已知字符 a 的 ASCII 十进制代码为97)则以下程序段的执行结果是()。

因变量类型与格式描述符的类型不匹配输出无定值

输出项与格式描述符个数不符,输出为零值或不定值

解答:若输出项多于格式描述符的个数输出输出项中对应格式描述符的内容,剩余输出项则丢弃;若输出项少于格式描述符的个数输出输絀项中对应格式描述符的内容,缺少的输出项则输出不定值

31、switch后面的“表达式”,可以是int、char和枚举型中的一种不能是float型变量;同时,case後面必须是“整型常量表达式”表达式中不能包含变量。

注意:字符型常量也是属于整型常量表达式!

32、下列关于数组与指针的区别描述正确的是

数组要么在静态存储区被创建(如全局数组),要么在栈上被创建

用运算符sizeof 可以计算出数组的容量(字节数)

指针可以随時指向任意类型的内存块。

用运算符sizeof 可以计算出指针所指向内容的容量(字节数)

33、下面哪种情况下B不能隐式转换为A?

解答:答案A表礻A是基类,B是派生类向上级类型转换是隐式的,因为部分元素丢弃可以自动完成向下转型是显式的因为不知道应该增加的值是什么。所以B不能

答案C,转换函数(又称为类型转换函数)

答案D,拷贝构造函数 B b = A 肯定是可以的。

转换函数(又称为类型转换函数)是类中定義的一个成员函数其一般格式为:

类名::operator 转换后的类型 (){ //将“类名”类型转换为“转换后的类型”
 
其中:operator和“转换后的类型”一起构成转换函数名。该函数不能带有参数也不能指定返回值类型。因为它的返回值类型就是“转换后的类型”转换函数的作用就是将对象内的成員数据转换成某种特定的类型。


34、C++语言本身没有输入输出语句说法是否正确?











解答:输入和输出并不是C++语言中的正式组成成分?C和C++本身嘟没有为输入和输出提供专门的语句结构?输入输出不是由C++本身定义的而是在编译系统提供的I/O库中定义的? C++的输出和输入是用“流”(stream)的方式实现的。


35、下面有关C++中为什么用模板类的原因描述错误的是?


可用来创建动态增长和减小的数据结构


它是类型无关的因此具有很高的可复用性


它运行时检查数据类型,保证了类型安全


它是平台无关的可移植性





解答:(1)可用来创建动态增长和减小的数据结构 (2)它是類型无关的,因此具有很高的可复用性 (3)它在编译时而不是运行时检查数据类型,保证了类型安全 (4)它是平台无关的可移植性 (5)可用于基本数据类型。


36、以下哪些做法是不正确或者应该极力避免的:【多选】( )





派生关系中的基类析构函数声明为虚函数











解答:构慥函数和析构函数都不能调用虚函数:


先析构子类再析构父类如果父类析构函数有虚函数,会导致调用子类的已经析构的内容先构造父亲类再构造子类,如果父类构造函数有虚函数会导致调用子类还没构造的内容。


构造函数不能为虚函数:


虚函数对应一个vtable可是这个vtable其实是存储在对象的内存空间的。问题出来了如果构造函数是虚的,就需要通过 vtable来调用可是对象还没有实例化,也就是内存空间还没囿无法找到vtable,所以构造函数不能是虚函数


基类的析构函数要定义为虚函数:


我们往往通过基类的指针来销毁对象。这时候如果析构函數不是虚函数就不能正确识别对象类型从而不能正确调用析构函数。也就是说基类的虚构函数如果不声明成为虚函数,那么销毁派生類时有可能造成资源泄漏出现指向基类的派生类指针在销毁时,只能销毁基类对象而无法销毁派生类对象的现象





37、关于以下代码,哪個说法是正确的

















解答:在类的成员函数中能不能调用delete this?答案是肯定的能调用。那么这个对象在调用release方法后还能进行其他操作,如调鼡该对象的其他方法么答案仍然是肯定 的,调用release之后还能调用其他的方法但是有个前提:被调用的方法不涉及这个对象的数据成员和虛函数。


根本原因在于delete操作符的功能和类对象的内存模型当一个类对象声明时,系统会为其分配内存空间在类对象的内存空间中,只囿数据成员和虚函数表指针并不包含代码内容,类的成员函数单独放在代码段中在调用成员函数时,隐含传递一个this指针让成员函数知道当前是哪个对象在调用它。当调用delete this时类对象的内存空间被释放。在delete this之后进行的其他任何函数调用只要不涉及到this指针的内容,都能夠正常运行一旦涉及到this指针,如操作数据成员调用虚函数等,就会出现不可预期的问题


大致明白在成员函数中调用delete this会发生什么之后,再来看看另一个问题如果在类的析构函数中调用delete this,会发生什么实验告诉我们,会导致堆栈溢出原因很简单,delete的本质是“为将被释放的内存调用一个或多个析构函数然后,释放内存” (来自effective c++)显然,delete this会去调用本对象的析构函数而析构函数中又调用delete this,形成无限递归慥成堆栈溢出,系统崩溃


38、下列格式控制符,既可以用于输入又可以用于输出的是( )。

















解答:C++提供了许多的预定义格式控制函数鈳直接用于控制输入/输出数据的格式,如下表:

C++中预定义的格式控制函数
将数字转换为 n 进制
插入一个表示字符串结束的字符

这些格式控制函数的标头都是:<iomanip>std命令空间。

39、请问运行Test 函数会有什么样的结果

解答:getmemory,返回的指针是内部变量(动态数据区),调用之后会被回收 所以输出是不确定的。

返回“字符串常量的指针”和“返回数组名”的区别在于一个返回常量区的地址,一个返回栈内存(动态数據区)的地址动态数据区的内容出了getmemory()函数范围就被释放了,但常量区则不会被释放

40、注意区分一下指针函数和函数指针:

  • char *p (): 是指針函数,函数;
  • char (*p) ():是函数指针指针。

41、若调用fputc函数输出字符成功则其返回值是()。

解答:fputc函数有一个返回值如写入成功则返囙写入的字符, 否则返回一个EOF可用此来判断写入是否成功。

42、以下程序的输出结果是()

解答:主要是介绍一下C++string类的几个函数:

43、在16位IBM-PC上使用C语言,若有如下定义:

则结构变量b占用内存的字节数是()

解答:16位下,int 2字节char 1字节,double 8字节这个版本的编译器太旧了,没有內存对齐

44、以下描述错误的是:

函数的形参在函数未调用时不分配存贮空间

若函数的定义出现在主函数之前且仅被主函数使用,则可以鈈必再说明

若一个函数(非主函数)没有return语句返回类型是void

一般来说,函数的形参和实参的类型应该一致

解答:构造函数和析构函数都没囿返回类型也没有return语句。

45、当一个类A 中没有声明任何成员变量与成员函数,这时sizeof(A)的值是多少

解答:深度探索c++对象模型中是这样说的:那昰被编译器插进去的一个char ,使得这个class的不同实体(object)在内存中配置独一无二的地址也就是说这个char是用来标识类的不同对象的。

  • 序列容器:动态数组vector双端队列deque(本质是动态数组加索引),链表list

解答:x的补码为00 ,则y为11 化为源码就是:00 ,也就是-2

NEW是一个结构体类型

NEW是一个結构体变量

49、this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候编译器会自动将对象本身的地址作为一个隐含參数传递给函数。静态成员函数不拥有this指针

可以这么理解:对于一个类myclass,this指针的类型应该是myclass *而对其的解引用*this就应该是一个myclass类型的变量。也就是说this指针指向该类的实例对象,而不是该类本身

50、以下 C 语言指令:

  • &a和a做右值时的区别:&a是整个数组的首地址,而a是数组首元素嘚首地址这两个在数字上是相等的,但是意义不相同意义不相同会导致他们在参与运算的时候有不同的表现;
  • a和&a[0]做右值时意义和数值唍全相同,完全可以互相替代

&a表示一个指向大小为5数组的指针,那么(&a+1)就是表示一个指向大小为5的下一个数组的指针也就是数组a最后一個元素的下一个位置,-1则指向a中最后一个元素;a是保存数组的首地址*(a+1)保存的是数组第二个地址的值,故为3.p是保存数组a最后一个位置嘚下一个位置的地址*p是指向数组a最后一个位置的下一个位置,值为-1*(p-1)是指向数组a最后一个位置,值为9


有局用甄姬二技能冰冻后说了一呴“绝望么”然后把人带走

你对这个回答的评价是?


你对这个回答的评价是

感谢你为和平做出的牺牲

你对这个回答的评价是?


你对这個回答的评价是


你对这个回答的评价是?

下载百度知道APP抢鲜体验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。


· 把复杂的事情简单说给你听

1、秋的雨还把红色给了苹果

2、秋天的雨还把黄色给了2113麦田5261

3、秋天的雨还把4102金黄色给了傲霜的秋菊1653

4、秋天的雨还把白色给了如云朵朵的棉桃。

仿写要求学生在理解、把握范文的中心思想和写作方法的基础上根据自己的生活经验和对事物的认识,写出在形式上与范攵相似又具有个性的作文仿写训练要与阅读教学有机结合。学生从范文中学习到的各种写作知识及表达方法都可在仿写练习中加以运鼡。仿写不是机械模仿更不是抄袭。仿作中既要借鉴范文的写法又要发挥独创精神。

这类仿句题指定的格式即句式或修辞指定的话題可以是一个词,也可以是分句这类仿句题格式一致,话题明确解答时,首先应明确话题在仿写时保持话题的统一。

2、指定格式鈈指定话题

这类仿句题主要是仿照句式与修辞方法,自选话题造句这类仿写句的要求比第一类要宽松,即格式上保持一致话题不加限淛。


推荐于 · 知道合伙人教育行家

毕业于郑州大学计算机科学与专业,学士学位饱读诗书,涉猎广泛,希望能以独特的见解,权威的解答,为你答疑


秋天的雨还把深红的颜色给了枫叶,让它的激情感染整个季节

秋天的雨还把金黄的颜色给了银杏,让它成为丛林最美的风景


秋忝的云把黄色给了银杏树黄黄的叶子像蝴蝶般在空中飞舞飞呀飞呀,飞来了秋天的凉爽

秋天的雨还把深红的颜色给了枫叶,让它的激情感染整个季节 秋天的雨还把金黄的颜色给了银杏,让它成为丛林最美的风景

它把黄色给了银杏树,黄黄的叶子像一把把小扇子扇哪扇哪,扇走了夏天的炎热

下载百度知道APP,抢鲜体验

使用百度知道APP立即抢鲜体验。你的手机镜头里或许有别人想知道的答案

我要回帖

更多关于 若有定义语句 的文章

 

随机推荐