C++面试考题(2020.6.6)
你能拿多少分呢?评论区等你回答
1.#include<filename.h>和 #include"filename.h"有什么区别?(10分)
答案:<>:在系统目录下查找,找不到就报错
"":在项目目录下查找,找不到再到系统目录下查找,再找不到报错
2. 请问最终结果为?(10分)
#define pow(x) x*x
int main()
{
for (int i = 1; i <= 6;i++)
cout << pow(i++) << endl;
}
答案:
1
16
3.指针与引用的区别?(10分)
答案
1、指针可以不初始化,但引用必须初始化
2、指针可能为空,但引用不可能为空
3、指针有自己独立的内存,但引用和被引用的对象共享一段内存
4、指针是可以改变指向的,但引用不能改变被引用的对象
4.以下为Windows NT下的32位C++程序,请计算sizeof的值(10分)
char str[] = "Hello";
char *p = str;
int n = 10;
请计算
sizeof(str) =
sizeof(p) =
sizeof(n) =
void Func(char str[100])
{
请计算 sizeof(str) =
}
void *p = malloc(100);
请计算sizeof(p) =
答案:6/4/4/4/4
5.为什么要使用虚析构?(5分)
答案:当用父类指针指向子类对象时,为了调用子类的析构函数,要将父类的析构函数写成虚函数。
6.常量指针和指针常量的区别?(10分)
答案:常量指针:表示指针指向一个被const修饰的变量,可以修改指向,但不可以修改指向的内容;
指针常量:表示指针本身是一个被const修饰的变量,可以改变指向的内容,但不可以修改指向,必须初始化;
7.什么是重载、隐藏和覆盖?(10分)
答案:重载:重载是指同名函数具有不同的参数表。
隐藏:隐藏是指派生类的函数屏蔽了与其同名的基类函数。
覆盖:覆盖是指派生类中存在重新定义基类的虚函数。
8.请写出每种类型变量所占字节数?(10分)
class A{};
class B{int a;char b;short c;char d;};
union C{int n;short m[3];};
class D{virtual void test(){}};
enum E{LEFT,RIGHT};
答案:1/12/8/4/4
9.写出程序的运行结果?(10分)
#include <iostream>
using namespace std;
class Father
{
public:
void callMe()
{
cout<<"I'm father!"<<endl;
hobby();
}
virtual void hobby()
{
cout<<"I like basketball!"<<endl;
}
};
class Son : public Father
{
public:
void callMe()
{
cout<<"I'm Son!"<<endl;
hobby();
}
void hobby()
{
cout<<"I like football!"<<endl;
}
};
int main()
{
Son* p1 = new Son();
p1->callMe();
Father* p2 = new Son();
p2->callMe();
return 0;
}
答案:
I'm Son!
I like football!
I'm father!
I like football!
10.已知strcpy函数的原型是char* strcpy(char* strDest,const char* strSrc); 其中strDest是目的字符串,strSrc是源字符串。15分)
- (1)不调用C/C++的字符串库函数,请编写函数strcpy(10分)
- (2)strcpy能把strSrc的内容复制到strDest,为什么还要char*类型的返回值?(5分)
-
答案: (1) char *strcpy(char *strDest, const char *strSrc); { assert((strDest!=NULL) && (strSrc !=NULL)); char *address = strDest; while( (*strDest++ = * strSrc++) != ‘\0’ ); return address ; } (2)为了实现链式表达式 例如int length = strlen( strcpy( strDest, “hello world”) );