(各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)

(各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)

大家好,又见面了,我是全栈君。

刚才把最后的10道题又看了下。也发上来吧。 

 

以下给出试题。和我对题目的一些理解

 

前10道题地址

(各个公司面试原题)在线做了一套CC++综合測试题。也来測一下你的水平吧(一)

 

11.设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?

C c;  void main()  {       A*pa=new A();       B b;       static D d;       delete pa;  }  

A.    A B C D

B.    A B D C

C.   A C D B

D.   A C B D

 

答案:B

c是全局变量,ab是局部变量。d是静态的局部变量

先构造的后析构。静态的局部变量dmain函数结束时析构,全局变量c在程序结束时析构。

 

语句

delete pa;  

使得a先于b析构

 

附图

(各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)

12.

char是一字节,int4字节,指针类型是4字节,代码例如以下:

class CTest  
{  
	public:  
	CTest():m_chData(‘\0’),m_nData(0)  
	{  
	}  
	virtual void mem_fun(){}  
	private:  
	char m_chData;  
	int m_nData;  
	static char s_chData;  
};  
char CTest::s_chData=’\0’;  

问:

1)若按4字节对齐sizeof(CTest)的值是多少?

2)若按1字节对齐sizeof(CTest)的值是多少?

请选择正确的答案。

A.     16 4

B.    16 10

C.   12 9

D.   10 10

 

答案:C

首先,分析类 CTest中占存储空间的变量和函数

变量:char型变量占1个字节。int型变量占4个字节,sizeof(CTest)所求得的长度不包括static变量的字节数

函数:类的普通函数在实例化时才分配内存空间。虚函数(不论多少个)则维护一个指针指向的虚函数表,指针占4个字节

所以。

4字节对齐,则 4(int)+4(长度为1字节的char)+4(指向虚函数表的指针)=12

1字节对齐,则 4(int)+1(长度为1字节的char)+4(指向虚函数表的指针)=9



13.

Java中,下面关于方法重载和方法重写描写叙述正确的是?

A.    方法重载和方法的重写实现的功能同样

B.    方法重载出如今父子关系中,方法重写是在同一类中

C.   方法重载的返回值类型必须一致,參数项必须不同

D.   方法重写的返回值类型必须同样。(或是其子类)

 

答案:D

这题的关键是分清方法重载和方法重写的概念。

要注意的是。可重载的方法,须要下面条件

1.方法名同样

2.方法參数个数不同 || 方法參数个数同样但至少有一对相应參数的类型不同

3.与返回值无关

 

而可重写的方法都是继承过来的,为维护一致性。返回值类型必定须要同样

 

14.

下列给定程序中,函数fun的功能是:ss所指字符串数组中长度最短的字符串所在的行下标。作为函数值返回,并把其串长放在形參n所指的变量中。ss所指字符串数数组中共同拥有M个字符串。且串长小于N

 
请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 

试题程序。


#define M 5#define N 20int fun(char(* ss)[N], int *n){	int i, k = 0, len = N;	for (i = 0; i < ______; i++)		{			len = strlen(ss[i]);			if (i == 0)				*n = len;			if (len ____ * n);			{				*n = len;				k = i;			}		}	return ( _____ );}main( ){	char ss[M][N] = {"shanghai", "guangzhou", "beijing", "tianjing", "chongqing"};	int n, k, i;	printf("\nThe originalb stringsare:\n");	for (i = 0; i < M; i++)		puts(ss[i]);	k = fun(ss, &n);	printf("\nThe length of shortest string is: % d\n", n);	printf("\nThe shortest string is: % s\n", ss[k]);}

A.    N < k

B.    N > k

C.   M < k

D.   M > k

 

答案:C

感觉比較水的一道题。。。

分析下代码就OK




15.

写出以下程序的输出结果

class A{public:	void FuncA()	{		printf( "FuncA called\n" );	}	virtual void FuncB()	{		printf( "FuncB called\n" );	}};class B : public A{public:	void FuncA()	{		A::FuncA();		printf( "FuncAB called\n" );	}	virtual void FuncB()	{		printf( "FuncBB called\n" );	}};void main( void ){	B b;	A *pa;	pa = &b;//pa为一个指向a对象的指针,这里,将其绑定在对象b上	A *pa2 = new A;//pa2为一个指向a对象的指针	pa->FuncA();//FuncA为普通函数,这里调用A类的FuncA函数	pa->FuncB();//FuncB为虚函数,依据继承性原理,子类有的调用子类。子类没有的,调用父类,这里,调用B类的FuncB函数	pa2->FuncA(); //这里调用A类的FuncA函数	pa2->FuncB();//由于pa2是一个指向A类的指针,所以,在A类中寻找FuncB函数,这里,调用A类的FuncB函数	delete pa2;}

A.    FuncA called FuncB called FuncA calledFuncB called

B.    FuncA called FuncBB called FuncA calledFuncB called

C.   FuncA called FuncBB called FuncAB calledFuncBB called

D.   FuncAB called FuncBB called FuncA calledFuncB called

 



答案:B

详情见凝视

 



16.

In the main() function,after ModifyString(text) is called, what’s the value of ‘text’?

int FindSubString( char* pch )
//这个函数是用来搜索回文字符串的,而且回文字符串的左右边上的字符要比回文串的开头结尾要大,
//比方BCDCB不行,但ABA能够
{
	int   count  = 0;
	char  * p1   = pch;//注意,指针pch在函数FindSubString中并未改变指向
	while ( *p1 != '\0' )
		{
			if ( *p1 == p1[1] - 1 )
				{
					p1++;
					count++;
				}
			else
				{
					break;
				}
		}
	int count2 = count;
	while ( *p1 != '\0' )
		{
			if ( *p1 == p1[1] + 1 )
				{
					p1++;
					count2--;
				}
			else
				{
					break;
				}
		}
	if ( count2 == 0 )
		return(count);
	return(0);
}
void ModifyString( char* pText )
{
	char  * p1   = pText;
	char  * p2   = p1;
	while ( *p1 != '\0' )
		{
			int count = FindSubString( p1 );//count为要跳过的字符数
			if ( count > 0 )
				{
					*p2++ = *p1;
					sprintf( p2, "%i", count );//把跳过的字符数量count覆盖在*p1+1的位置
					while ( *p2 != '\0' )//这个while循环非常重要,应该是,仅仅有*p2指向'\0'时,缓冲放在缓冲区的count才会真的覆盖text串的值
						{
							p2++;
						}
					p1 += count + count + 1;//p1跳过回文字符串
				}
			else
				{
					*p2++ = *p1++;
				}
		}
}
void main( void )
{
	char text[32] = "XYBCDCBABABA";
	ModifyString( text );
	printf( text );
}

A.    XYBCDCBABABA

B.    XYBCBCDAIBAA

C.   XYBCDCBAIBAA

D.   XYBCDDBAIBAB

 



答案:C

看凝视吧,有些地方我也不太明确,就把看懂的凝视了。

 



17.

以下程序的功能是输出数组的全排列。请填空。

void perm(int list[], int k, int m)
{
	if (    )
		{
			copy(list,list+m,ostream_iterator<int>(cout," "));
			cout<<endl;
			return;
		}
	for (int i=k; i<=m; i++)
		{
			swap(&list[k],&list[i]);
			(    );
			swap(&list[k],&list[i]);
		}
}

A.    k!=mpermlistk+1m

B.    k==mpermlistk+1m

C.   k!=mpermlistkm

D.   k==mpermlistkm

 

答案:B

好吧(∩_∩),是不是ACM时代见过?字符串全排列,用的是DFS

可參见NYOJ 32 组合数


18.

写出下列程序的执行结果。

#include "stdio.h"
int sum(int a)
{
	auto int c = 0;
	static int b = 3;
	c += 1;
	b += 2;
	return (a + b + c);
}
int main()
{
	int i;
	int a = 2;
	for (i = 0; i < 5; i++)
		{
			printf("%d,", sum(a));
		}
}

A.    68101214

B.    810121416

C.   1012141618

D.   1214161820

 



答案:B

又道水题。。。static类型的变量初始化一次,存在于整个函数生存期


19.

#include<iostream>using namespace std;class MyClass{public:	MyClass(int i = 0)	{		cout << i;	}	MyClass(const MyClass &x)	{		cout << 2;	}	MyClass &operator=(const MyClass &x)	{		cout << 3;		return *this;	}	~MyClass()	{		cout << 4;	}};int main(){	MyClass obj1(1), obj2(2);	MyClass obj3 = obj1;	return 0;}

执行时的输出结果是()

A.     11214444

B.    11314444

C.   122444

D.   123444

 

答案:C

主要是选C和选D的讨论,这涉及到浅复制和深复制

MyClass obj3= obj1;  

这里进行的是浅复制。调用的是copy construction函数

若上边那行代码是例如以下形式


MyClass obj3;  
obj3= obj1;  

则进行的是深复制。调用的是assignment operators函数

 

20.

例如以下代码输出结果是什么?

#include<stdio.h>
char *myString()
{
	char buffer[6] = {0};//存放在栈上。在函数末尾将释放
	char *s = "Hello World!";
	for (int i = 0; i < sizeof(buffer) - 1; i++)
		{
			buffer[i] = *(s + i);
		}
	return buffer;//buffer的内存将释放,从而*buffer变成一个野指针
}
int main(int argc, char **argv)
{
	printf("%s\n", myString());
	return 0;
}

A.     Hello

B.    Hello World!

C.   Well

D.   以上所有不对

 



答案:D

详情见凝视

 

总算完了。

。。继续调摄像头去了。。。。

 



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/115699.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oralce入门学习[通俗易懂]

    oralce入门学习[通俗易懂]oracle的认识sql数据库语言关键字distinct关键字null连接符||比较运算符排序单行函数字符函数数值函数日期函数转换函数通用函数条件表达式多行函数

    2022年7月2日
    29
  • 32H7_海马s5近光可以直接换H7吗

    32H7_海马s5近光可以直接换H7吗完整版教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=94547第16章DSP功能函数-数据拷贝,数据填充和浮点转定点本期教程主要讲解功能函数中的数据拷贝,数据填充和浮点数转换为定点数。目录第16章DSP功能函数-数据拷贝,数据填充和浮点转定点16.1初学者重要提示16….

    2025年9月28日
    2
  • 搭建云计算平台(云计算管理平台搭建)

    搭建云计算平台Openstack是一个开源项目。任何公司或个人都可以构建自己的云计算环境,这已经打破了亚马逊等少数公司的垄断,意义重大。简介:如果你是开源社区的CTO或代码贡献者,你一定听说过openstack。Openstack是由网络主机服务提供商Rackspace和NASA联合发起的一个开源项目。其目的是开发一套开源软件标准。任何公司或个人都可以建立自己的云计算环境(IAAs),这打破了亚…

    2022年4月18日
    217
  • 计算机视觉–光流法(optical flow)简介[通俗易懂]

    计算机视觉–光流法(optical flow)简介[通俗易懂]光流法理论背景1.什么是光流光流(opticalflow)是空间运动物体在观察成像平面上的像素运动的瞬时速度。光流法是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。通常将二维图像平面特定坐标点上的灰度瞬时变化率定义为光流矢量。一言以概之:所谓光流就是瞬时速率,在时间间隔很小(…

    2022年7月23日
    23
  • SOA/软件架构设计—面向服务的架构(SOA详细解释)「建议收藏」

    SOA/软件架构设计—面向服务的架构(SOA详细解释)「建议收藏」文章比较多,但干货慢慢,请耐心阅读面向服务的架构迄今为止,对于面向服务的架构(Service-OrientedArchitecture,SOA)还没有一个公认的定义。许多组织从不同的角度和不同的侧面对SOA进行了描述,较为典型的有以下三个:(1)W3C的定义:SOA是一种应用程序架构,在这种架构中,所有功能都定义为独立的服务,这些服务带有定义明确的可调用接口…

    2022年7月24日
    20
  • csgo怎么绑定一键跳投_CSGO投掷物一键跳投的设置方法[通俗易懂]

    所需工具:空白的文本文档适用范围:跳投高抛/跳投中抛/跳投低抛步骤一:打开新建的文本文档,输入如下内容alias+jumpthrow”+jump;-attack;-attack2″;alias-jumpthrow-jump;bindt+jumpthrow;(注释:t为你想绑定的键位)步骤二:保存文档,重命名为a.cfg(其实只要是.cfg结束即可),此时文件应…

    2022年4月12日
    672

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号