- 假定AA为一个类,int a()为该类的一个成员函数,若该成员函数在类定义体外定义,则函数头为__________________________
- A、int AA::a( )
- B、int AA:a()
- C、AA::a()
- D、AA::int a()
- 在下列关于C++函数的叙述中,正确的是__________________
- A、每个函数至少要有一个参数
- B、每个函数都必须返回一个值
- C、函数在被调用之前必须先声明
- D、函数不能自己调用自己
- 下列关于this指针的说法正确的是_______________
- A、this指针存在于每个函数之中
- B、在类的非静态函数中this指针指向调用该函数的对象
- C、this指针是指向虚函数表的指针
- D、this指针是指向类的函数成员的指针
- 有如下程序:
#include <iostream>
using namespace std;
class point
{
public:
static int number;
public:
point() { number++;}
~point() {number--;}
};
int point::number=0;
void main()
{ point *ptr;
point A,B;
{
point *ptr_point=new point[3];
ptr=ptr_point;
}
point C;
delete[] ptr;
cout<<point::number;
}
程序结果为________________
- A、3
- B、4
- C、6
- D、7
- 有如下程序:
• #include<iostream>
using namespace std;
class MyClass{
public:
MyClass(int i=0){cout<<1;}
MyClass(const MyClass&x){cout<<2;}
MyClass& operator=(const MyClass&x){cout<<3; return *this;}
~MyClass(){cout<<4;}
};
int main(){
MyClassobj1(1),obj2(2),obj3(obj1);
obj1=obj2;
return0;
- A、1123444
- B、11114444
- C、121444
- D、11314444
- 有如下程序:
#include<iostream>
using namespace std;
class Test{
public:
Test(){}
~Test(){cout<<'#';}
};
int main(){
Test temp[2], *pTemp[2];
return 0;
}
执行这个程序输出星号(#)的个数为__________
- A、1
- B、2
- C、3
- D、4
- 有下类定义
Class A {
Char *a;
Public:
A():a(0){}
A(char *aa) {//把aa所指字符串拷贝到a所指向的存储空间
A=___________________;
Strcpy(a,aa);
~A() {delete [] a;}
};
正确的选择是__________________
- A、new char[strlen(aa)+1]
- B、char[strlen(aa)+1]
- C、char[strlen(aa)]
- D、new char[sizeof(aa)-1]
- 下列关于虚基类的描述中,错误的是________________
- A、使用虚基类可以消除由多继承产生的二义性
- B、构造派生类对象时,虚基类的构造函数只被调用一次
- C、声明 class B:virtual public A 说明类B为虚基类
- D、建立派生类对象时,首先调用虚基类的构造函数
- 下面程序的输出结果是_______________
#include <iostream>
using namespace std;
class Sample
{
friend long fun (Sample s)
{
if (s.x < 2) return 1;
return s.x * fun(Sample(s.x-1));
}
public:
Sample (long a) { x = a; }
private:
long x;
};
void main()
{
int sum = 0;
for (int i=0; i<4; i++)
{
sum += fun(Sample(i));
}
cout << sum;
- A、12
- B、16
- C、10
- D、34
- 下面的程序段的运行结果为___________________
char str[] = "job", *p = str;
cout << *(p+2) << endl;
- A、98
- B、无输出结果
- C、字符’b’的地址
- D、字符’b’
- 下面程序的输出结果是________________
• #include <iostream>
using namespace std;
class Base
{
public:
virtual void f() { cout << “f0+”; }
void g() { cout << “g0+”; }
};
class Derived : public Base
{
public:
void f() { cout << “f+”; }
void g() { cout << “g+”; }
};
void main()
{
Derived d;
Base *p = &d;
p->f();
p->g();
}
- A、f+g+
- B、f0+g+
- C、f+g0+
- D、f0+g0+
- 下列情况中,哪一种情况不会调用拷贝构造函数________________
- A、用派生类的对象去初始化基类对象时
- B、将类的一个对象赋值给该类的另一个对象时
- C、函数的形参是类的对象,调用函数进行形参和实参结合时
- D、函数的返回值是类的对象,函数执行返回调用者时
- 下面程序的输出结果是________________
• #include <iostream>
using namespace std;
class Base
{
public:
Base(int i) { cout << i; }
~Base () { }
};
class Base1: virtual public Base
{
public:
Base1(int i, int j=0) : Base(j) { cout << i; }
~Base1() {}
};
class Base2: virtual public Base
{
public:
Base2(int i, int j=0) : Base(j) { cout << i; }
~Base2() {}
};
class Derived : public Base2, public Base1
{
public:
Derived(int a, int b, int c, int d) : mem1(a), mem2(b), Base1(c),
Base2(d), Base(a)
{ cout << b; }
private:
Base2 mem2;
Base1 mem1;
};
void main() { Derived objD (1, 2, 3, 4); }
- A、134122
- B、123412
- C、14302012
- D、143212
- 2016奇虎360 C++研发工程师内推笔试题
- 1 x是一个行列数均为1000二维数组,下面代码效率执行最高的是()
for(int j=0;j<1000;j++) for(int i=0;i<1000;i++) x[i][j]+=x[j][i];
for(int i=0;i<1000;j++) for(int j=0;j<1000;j++) x[i][j]+=x[j][i];
for(int i=0;i<1000;j++) for(int j=0;j<1000;j++) x[j][i]+=x[j][i];
for(int i=0;i<1000;i++) for(int j=0;j<1000;j++) x[i][j]+=x[i][j];
2 不能把字符串"HELLO!"赋给数组b的语句是()
char b[10]={'H','E','L','L','O','!','\0'};
char b[10];b="HELLO!";
char b[10];strcpy(b,"HELLO!");
char b[10]="HELLO!";
b是表示数组的首地址,不能赋值
3 假设寄存器为8位,用补码形式存储机器数,包括一位符号位,那么十进制数-25在寄存器表示为:
67H
99H
E6H
E7H
十进制数-25的原码为10011001,反码为11100110,补码是反码加1,即为11100111,转化为十六进制即为E7
4下面程序会输出什么:
static int a=1;
void fun1(void){ a=2;}
void fun2(void){ i
nt a=3;
}
void fun3(void){
static int a=4;
}
int main(int argc,char**a){
printf(“%d”,a);
fun1( );
printf(“%d”,a);
fun2( );
printf(“%d”,a);
fun3( );
printf(“%d”,a);
}
- 1 2 3 4
1 2 2 2
1 2 2 4
1 1 1 4
静态局部变量只对定义它的函数体始终可见,函数体执行完过后虽然还存在,但是无法被其他的使用了
5下面这段代码的输出结果为:
void change(int*a, int&b, int c){
c=*a;
b=30;
*a=20;
}
int main ( ){
int a=10, b=20, c=30;
change(&a,b,c);
printf(“%d,%d,%d,”,a,b,c);
return 0;
}
- 20,30,30
10,20,30
20,30,10
10,30,30
传值不会改变变量的值,但是传引用和传指针都会改变。
6在c++中,
const int i = 0;
int *j = (int *) &i;
*j = 1;
printf("%d,%d", i, *j)
- 输出是多少?
0,1
1,1
1,0
0,0
C++中的常量折叠:指const变量(即常量)值 放在编译器的符号表中 ,计算时编译器直接从表中取值,省去了访问内存的时间,从而达到了优化。
7请问下面的程序最后会产生多少个进程:
int main( ){
int i;
for(i = 0; i<5;i++){
int pid = fork();
if(pid == 0){
//do something
} else {
//do something
}
}
// do somthing,sleep
return 0;
}
- 5
10
15
32
8下面代码不能正确输出hello的选项为
#include<stdio.h>
struct str_t{
long long len;
char data[32];
};
struct data1_t{
long long len;
int data[2];
};
struct data2_t{
long long len;
char *data[1];
};
struct data3_t{
long long len;
void *data[];
};
int main(void)
{
struct str_t str;
memset((void*)&str,0,sizeof(struct str_t));
str.len=sizeof(struct str_t)-sizeof(int);
snprintf(str.data,str.len,"hello");//VS下为_snprintf
____________________________________;
____________________________________;
return 0;
}
- struct data3_t *pData=(struct data3_t*)&str; printf("data:%s%s\n",str.data,(char*)(&(pData->data[0])));
struct data2_t *pData=(struct data2_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data[0]));
struct data1_t *pData=(struct data1_t*)&str;printf("data:%s%s\n",str.data,(char*)(pData->data));
struct str_t *pData=(struct str_t*)&str; printf("data:%s%s\n",str.data,(char*)(pData->data));
http://www.nowcoder.com/test/question/done?tid=1103973&qid=25235#summary
9下面代码段输出为:
int i;
for(i=0;i<3;i++){
switch(i){
case 0:printf("%d",i);
case 2:printf("%d",i);
default:printf("%d",i);
}
}
- 000111
000020
000102
000122
10
int function(const int src[16]){
int val1=0;
int dst[16]={0};
int val2=0;
const int *psrc=src;
//问题1:如下代码行输出什么?
fprintf(stdout,"size of src=%lu\n",sizeof(src));
//问题2:如下代码有什么副作用?
for(int i=0;i<=16;i++){
dst[i]=*psrc+i;
psrc++;
}
return 0;
}
- 在gcc编译器下,以下说法正确的是
16,val2会被覆盖
其他三项都不对
8,val2会被覆盖
8,val1会被覆盖
函数调用时,局部变量按照申明顺序入栈,而栈又是从高地址往低地址生长的
所以,val1的地址在dst的地址后面,当访问dst越界时,会覆盖掉val1的地址
11下面程序的输出是:
#define f(x) x*x
main (){
int a=6,b=2,c;
c=f(a)/f(b);
printf("%d",c);
}
- 3
18
36
9
12在64位操作系统上,如下数据结构占用的存储空间大小为多少字节
struct A{
unsigned int a;
char b[2];
double c;
short d;
}
- 12
24
20
16
13 在C++语言中,下列说法正确的是:
inline函数表示编译器一定会将函数体直接插入到调用此函数的地方,这样可以加快程序的运行速度
局部变量和全局变量不能重名
静态局部变量内存是在运行期分配的,存储在堆栈区
C++不是类型安全的语言
14
void swap_int(int *a,int *b){
*a=*a+*b;
*b=*a-*b;
*a=*a-*b;
}
以下说法正确的是:
结果不正确,因为会溢出,用位与的方式就没问题
结果正确,即使会溢出
结果正确,不会溢出
其他选项都不对
15以下程序的运行结果是:
int main(void){
int m=5;
if(m++>5)cout<<m<<endl;
else cout<<--m;
}
- 4
5
7
6
16对两个字符a和b进行初始化:
char a[]="ABCDEF";
char b[]={'A','B','C','D','E','F'};
则以下叙述正确的是:
a数组比b数组长度长
a与b长度相同
a与b数组完全相同
a和b中都存放字符串
用字符串方式赋值比用字符逐个赋值要多占一个 字节 , 用于存放字符串结束标志'\0'
17在一个64位的操作系统中定义如下结构体:
struct st_task
{
uint16_t id;
uint32_t value;
uint64_t timestamp;
};
- 同时定义fool函数如下:
void fool()
{
st_task task = {};
uint64_t a = 0x00010001;
memcpy(&task, &a, sizeof(uint64_t));
printf("%11u,%11u,%11u", task.id, task.value, task.timestamp);
}
- 上述fool()程序的执行结果为()
1,0,0
1,1,0
0,1,1
0,0,1
结构体每个成员相对结构体首地址的偏移量(offset)都是每个成员本身大小的整数倍
18 定义char dog[]="wang\0miao";那么sizeof(dog)与strlen(dog)分别是多少:
10,4
4,4
9,9
9,4
sizeof返回数组所占的字节数,'wang' 'miao'共占8字节,显式'\0'占1字节,字符串末尾隐式'\0'占1字节,共10字节。
strlen返回字符串的长度,以遇到'\0'结束符为准,因此为4。
19 C++中以下关于函数调用的说法哪个是正确的?
传地址后实参和形参指向不同的对象
传引用后实参和形参是不同的对象
传值后对形参的修改会改变实参的值
其他三项都不对
20 以下系统中,int类型占几个字节,指针占几个字节,操作系统可以使用的最大内存空间是多大:
32位下:4,4,2^32 64位下:8,8,2^64
32位下:4,4,不限制 64位下:4,8,不限制
32位下:4,4,2^32 64位下:4,8,2^64
32位下:4,4,2^32 64位下:4,4,2^64
21 C++中关于堆和栈的说法,哪个是错误的:
堆的大小仅受操作系统的限制,栈的大小一般一般较小
在堆上频繁的调用new/delete容易产生内存碎片,栈没有这个问题
堆和栈都可以静态分配
堆和栈都可以动态分配
22Linux下多少个"-"将被打印:
int main(void){
int i;
for(i=0;i<4;i++){
fork();
printf("-\n");
}
return 0;
}
- 16
30
32
15
i=0时,主进程和其创建的子进程分别打印'-', 打印2个
i=1时,之前两个进程打印'-', 每个进程又创建新的子进程, 共打印4个'-'
i=2时,之前的四个进程分别打印'-', 并创建新的子进程, 故共打印8个'-'
i=3时,之前的8个进程分别打印'-', 并创建新的子进程,故共打印16个'-'
综上所述, 共打印2+4+8+16=30个
23 代码生成阶段的主要任务是:
把高级语言翻译成机器语言
把高级语言翻译成汇编语言
把中间代码变换成依赖具体机器的目标代码
把汇编语言翻译成机器语言
24下面代码的执行结果是什么:
char ccString1[]="Is Page Fault??";
char ccString2[]="No Page Fault??";
strcpy(ccString1,"No");
if(strcmp(ccString1,ccString2)==0)
cout<<ccString2;
else
cout<<ccString1;
- No
No Page Fault??
Is Page Fault??
其他三项都错
25以下代码共调用多少次拷贝构造函数:
Widget f(Widget u)
{
Widget v(u);
Widget w=v;
return w;
}
main(){
Widget x;
Widget y=f(f(x));
}
- 1
3
5
7
26下面C程序的输出结果:
int i=0,a=1,b=2,c=3;
i=++a||++b||++c;
printf("%d %d %d %d",i,a,b,c);
- 1 2 2 3
1 2 3 4
3 2 3 4
3 3 3 4