C++ 常见面试题目
const作用
(1)可以定义const常量,具有不可变性。
(2)便于进行类型检查。(而宏不会进行类型检查)。
(3)可以保护被修饰的东西,防止意外的修改。
(4) 可以节省空间。
static作用
1.隐藏:一个文件中的全局变量在另外一个文件中使用extern声明就能使用,声明了static就不能了
一个函数内的static变量具有全局生命期,但只在这个函数中可见
2.记忆功能和全局生存期
3.默认初始化为0
4.类的静态成员函数是属于整个类而非类的对象,所以它没有this指针
5.不能将静态成员函数定义为虚函数。
6.不可以同时用const和static修饰成员函数。
什么函数不能声明为虚函数
1:只有类的成员函数才能说明为虚函数;
2:静态成员函数不能是虚函数;
3:内联函数不能为虚函数;
4:构造函数不能是虚函数;
5:析构函数可以是虚函数,而且通常声明为虚函数。
指针和引用的区别
本质上:指针是一个新的变量,只是这个变量存储的是另一个变量的地址,我们通过访问这个地址来修改变量。
而引用只是一个别名,还是变量本身。对引用进行的任何操作就是对变量本身进行操作,因此以达到修改变量的目的。
1.引用必须被初始化,指针不必
2.引用初始化以后不能被改变,指针可以改变所指的对象。
3.不存在指向空值的引用,但是存在指向空值的指针。
4."sizeof引用"得到的是所指向的变量(对象)的大小,而"sizeof指针"得到的是指针本身的大小
封装、继承、多态
封装:将客观事物抽象成类,每个类对自身的数据和方法实行访问控制
继承:代码复用,可以使得代码模块化,扩展已存在的代码
多态:一个接口,多种方法,程序在运行时才决定调用的函数, 作用:接口重用
实现:子类重写父类虚函数,如果一个类中包含虚函数(virtual修饰的函数),那么这个类就会包含一张虚函数表,虚函数表存储的每一项是一个虚函数的地址
这个类的每一个对象都会包含一个虚指针,指向虚函数表,通过某个类型的指针访问某个成员时,编译器只是根据类型的定义查找这个成员所在偏移量,用这个偏移量获取成员
纯虚函数(抽象类)
方法:virtual ReturnType Function()= 0;
该基类只做能被继承,而不能被实例化
这个方法必须在派生类中被实现
结构体、联合
#include "stdafx.h"
#include <iostream>
using namespace std; union u {//联合,共同占用一段内存。
char c;
int i;
}; #pragma pack(2)//指定对齐字节数
struct MyStruct //每个成员都有自己独立的地址
{
short s;
int i; //最大为4字节
char c;
};
#pragma pack()//恢复默认,一般是8 //字节对齐数 按结构塔中最大成员的字节数 和 设置数 取小值
//则按2字节 对齐 int main()
{ union u a = { 0x9843 };
printf("1.%c %x\n", a.c, a.i); a.c = 'B';
printf("2.%c %x\n", a.c, a.i); a.i = 0x0143;
printf("3.%c 4.%d\n", a.c, a.i); //大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位保存在内存的低地址中
//小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中
int num = ;
char *p = (char*)#
if (*p == )
cout << "小端" << endl;
else
cout << "大端" << endl; a.i = ;
if (a.c == )
cout << "小端" << endl;
else
cout << "大端" << endl; MyStruct st;
cout << sizeof(st) << endl; //指定了#pragma pack(2)则为8, 没有则12
return ;
}
内存管理
void GetMemory1(char *p)
{
p = (char*)malloc(100);
}
void Test1()
{
char *str = NULL;
GetMemory1(str);
strcpy(str, "hello world");
printf(str);
}
//str一直是空,程序崩溃,p作为形参,是str的副本,申请了内存,但str并未改变
char *GetMemory()
{
char p[] = "hello world";
return p;
}
void Test2()
{
char *str = NULL;
str = GetMemory();
printf(str);
}
可能是乱码
p[]数组为函数内的局部变量,在函数返回后,内存已经被释放
void GetMemory(char **p, int num)
{
*p = (char *)malloc(num);
}
void Test3()
{
char *str = NULL;
GetMemory(&str, 100);
strcpy(str, "hello");
printf(str);
}
打印hello,
未对malloc的内存进行释放
GetMemory中申请内存后应加上if ( *p == NULL ),以进行内存分配失败的处理
void Test4(void)
{
char *str = (char *)malloc(100);
strcpy(str, "hello");
free(str);
if (str != NULL)
{
strcpy(str, "world");
printf(str);
}
}
可能会打印world,
free(str);之后未将str赋值为NULL,str为野指针
在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可以用于申请动态内存和释放内存。
对于非内部数据类型对象而言,光用malloc/free无法满足动态对象的要求。
对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。
由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free.
C++ 常见面试题目的更多相关文章
- BAT网络运维常见面试题目总结
BAT常见面试题目总结 Author:Danbo 2015-7-11 TCP/IP详解鸟哥Linux的书网络安全ping的原理make的过程文件有哪些类型各种Linux发行版的区别.有关suid的作用 ...
- java常见面试题目(一)
在大四实习阶段,秋招的时候,面试了很多家公司,总结常见的java面试题目:(答案可以自己百度) 1.你所用oracle的版本号是多少? 2.tomcat修改8080端口号的配置文件是哪个? 3.myb ...
- java常见面试题目
(面的初级到中级之间的,却有很多高级的问题) 总结一些常见的遇见的面试题(来自各方面收集) 1.开发中Java用了比较多的数据结构有哪些? 2.谈谈你对HashMap的理解,底层原理的基本实现,Has ...
- tomcat常见面试题目问答Top10
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它 ...
- java程序员常见面试题目
答:每当程序出现异常之后,如果程序没有进行相应的处理,则程序会出现中断现象.实际上,产生了异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句捕获的话,则可以进行异常的处理,否则 ...
- java常见面试题目(三)
1.jsp的内置对象. JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.page. ...
- Android常见面试题目
1.Activity 的生命周期 转自:http://kb.cnblogs.com/page/70125/ 多谢楼主分享 首先看一下Android api中所提供的Activity生命周期图(不明白的 ...
- mysql常见面试题目
1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关联. (2)再问一致性,延时性,数据恢复. (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myisam ...
- java常见面试题目(二)
部分没有答案可以自行百度. 1.myeclipse与eclipse的区别. 2.说说对maven或者SVN的理解. 3.类的加载过程 (创建对象的过程) 1)子父类里静态属性 赋上默认初始值 如果有 ...
随机推荐
- Ubuntu 18.04 安装 Apache, MySQL, PHP7, phpMyAdmin
https://blog.csdn.net/sanve/article/details/80770675
- 随心测试_软测基础_007<软测学习路线建议>
如果你对软测感兴趣,那么如何学习软件测试呢? 贴心小提示:以下内容,仅供参考,不挖坑 1:学习方式_职业教育选择观 ————SX的观点:成本 | 收益说,理性接受 软测产业服务链中,测试工程师重在于& ...
- 接口(迭代器) Iterator
Iterator接口简介 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是Java集合中的一员,但它与C ...
- day13(函数嵌套定义,global,nonlocal关键字,闭包,装饰器)
一,复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...
- Spring Boot与分布式
---恢复内容开始--- 分布式.Dubbo/Zookeeper.Spring Boot/Cloud 一.分布式应用 在分布式系统中,国内常用zookeeper+dubbo组合, 而Spring Bo ...
- OO第二单元总结——多线程电梯
第五次作业分析 1.设计策略 调度器采用单例模式,内部设请求队列,对请求队列的一切操作(查.增.删)都在调度器内完成,且都要求串行,从而确保线程安全.接收器和电梯是两个线程:接收器接受请求调用调度器来 ...
- icpc 南昌邀请赛网络赛 Max answer
就是求区间和与区间最小值的积的最大值 但是a[i]可能是负的 这就很坑 赛后看了好多dalao的博客 终于a了 这个问题我感觉可以分为两个步骤 第一步是对于每个元素 以它为最小值的最大区间是什么 第二 ...
- 源码分析 ucosii/source 任务源码详细分析
分析源码: 得先学会读文档, 函数前边的 note :是了解该程序员的思想的途径.不得不重视 代码前边的 Notes,了解思想后,然后在分析代码时看他是如何具体实现的. 1. ucosii/sour ...
- UOJ22 UR #1外星人(动态规划)
https://www.cnblogs.com/Gloid/p/10629779.html 这一场的D. #include<bits/stdc++.h> using namespace s ...
- JSSDK调用微信原生的功能上传图片保存到自己的服务器中
第一件事首先是微信的选择图片功能,就是微信发朋友圈选择图片的时候那个界面 //调用微信拍照功能 wx.chooseImage({ count: 1, // 默认9 sizeType: ['origin ...