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*)&num;
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++ 常见面试题目的更多相关文章

  1. BAT网络运维常见面试题目总结

    BAT常见面试题目总结 Author:Danbo 2015-7-11 TCP/IP详解鸟哥Linux的书网络安全ping的原理make的过程文件有哪些类型各种Linux发行版的区别.有关suid的作用 ...

  2. java常见面试题目(一)

    在大四实习阶段,秋招的时候,面试了很多家公司,总结常见的java面试题目:(答案可以自己百度) 1.你所用oracle的版本号是多少? 2.tomcat修改8080端口号的配置文件是哪个? 3.myb ...

  3. java常见面试题目

    (面的初级到中级之间的,却有很多高级的问题) 总结一些常见的遇见的面试题(来自各方面收集) 1.开发中Java用了比较多的数据结构有哪些? 2.谈谈你对HashMap的理解,底层原理的基本实现,Has ...

  4. tomcat常见面试题目问答Top10

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,它 ...

  5. java程序员常见面试题目

      答:每当程序出现异常之后,如果程序没有进行相应的处理,则程序会出现中断现象.实际上,产生了异常之后,JVM会抛出一个异常类的实例化对象,如果此时使用了try语句捕获的话,则可以进行异常的处理,否则 ...

  6. java常见面试题目(三)

    1.jsp的内置对象. JSP中一共预先定义了9个这样的对象,分别为:request.response.session.application.out.pagecontext.config.page. ...

  7. Android常见面试题目

    1.Activity 的生命周期 转自:http://kb.cnblogs.com/page/70125/ 多谢楼主分享 首先看一下Android api中所提供的Activity生命周期图(不明白的 ...

  8. mysql常见面试题目

    1, mysql的复制原理以及流程. (1)先问基本原理流程,3个线程以及之间的关联. (2)再问一致性,延时性,数据恢复. (3)再问各种工作遇到的复制bug的解决方法 2,mysql中myisam ...

  9. java常见面试题目(二)

    部分没有答案可以自行百度. 1.myeclipse与eclipse的区别. 2.说说对maven或者SVN的理解. 3.类的加载过程 (创建对象的过程)  1)子父类里静态属性 赋上默认初始值 如果有 ...

随机推荐

  1. Ubuntu 18.04 安装 Apache, MySQL, PHP7, phpMyAdmin

    https://blog.csdn.net/sanve/article/details/80770675

  2. 随心测试_软测基础_007<软测学习路线建议>

    如果你对软测感兴趣,那么如何学习软件测试呢? 贴心小提示:以下内容,仅供参考,不挖坑 1:学习方式_职业教育选择观 ————SX的观点:成本 | 收益说,理性接受 软测产业服务链中,测试工程师重在于& ...

  3. 接口(迭代器) Iterator

    Iterator接口简介 在程序开发中,经常需要遍历集合中的所有元素.针对这种需求,JDK专门提供了一个接口java.util.Iterator.Iterator接口也是Java集合中的一员,但它与C ...

  4. day13(函数嵌套定义,global,nonlocal关键字,闭包,装饰器)

    一,复习 ''' 1.函数对象:函数名 => 存放的是函数的内存地址 1)函数名 - 找到的是函数的内存地址 2)函数名() - 调用函数 => 函数的返回值 eg:fn()() => ...

  5. Spring Boot与分布式

    ---恢复内容开始--- 分布式.Dubbo/Zookeeper.Spring Boot/Cloud 一.分布式应用 在分布式系统中,国内常用zookeeper+dubbo组合, 而Spring Bo ...

  6. OO第二单元总结——多线程电梯

    第五次作业分析 1.设计策略 调度器采用单例模式,内部设请求队列,对请求队列的一切操作(查.增.删)都在调度器内完成,且都要求串行,从而确保线程安全.接收器和电梯是两个线程:接收器接受请求调用调度器来 ...

  7. icpc 南昌邀请赛网络赛 Max answer

    就是求区间和与区间最小值的积的最大值 但是a[i]可能是负的 这就很坑 赛后看了好多dalao的博客 终于a了 这个问题我感觉可以分为两个步骤 第一步是对于每个元素 以它为最小值的最大区间是什么 第二 ...

  8. 源码分析 ucosii/source 任务源码详细分析

    分析源码: 得先学会读文档, 函数前边的 note :是了解该程序员的思想的途径.不得不重视 代码前边的  Notes,了解思想后,然后在分析代码时看他是如何具体实现的. 1. ucosii/sour ...

  9. UOJ22 UR #1外星人(动态规划)

    https://www.cnblogs.com/Gloid/p/10629779.html 这一场的D. #include<bits/stdc++.h> using namespace s ...

  10. JSSDK调用微信原生的功能上传图片保存到自己的服务器中

    第一件事首先是微信的选择图片功能,就是微信发朋友圈选择图片的时候那个界面 //调用微信拍照功能 wx.chooseImage({ count: 1, // 默认9 sizeType: ['origin ...