C++面试考题一(2020.6.6)

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”) );
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值