码迷,mamicode.com
首页 > 编程语言 > 详细

面试之C/C++

时间:2015-12-07 22:25:40      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

1.Define 和 const区别

无数据类型                       有数据类型

字符替换无安全检查               有安全检查

Define 的生命周期止于编译器

 

2.堆和栈区别

程序员MALLOC NEW手动分配的

定义的变量

 

3.指针和引用区别

可修改:指针可以被重新赋值       引用必须初始化不能修改 

合法性:测试防止为空             不需要测试合法性

 

4.strlen和sizeof

 

5.const * p 内容不变

   * const p 地址不变

就近原则

 

6.Malloc 和New区别

Malloc内存的动态存储区中分配一个长度为  size 的连续空间,成功Malloc返回void *类型,否则返回NULL。(两次 malloc 分配的内存的内存块不一定是相邻的)

1.malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符

2.用new分配的对象会调用对象的构造函数,delete则会调用对象的析构函数, 对内存进行更加详细的工作。
而malloc和free从不调用构造和析构函数,他们只是简单的分配内存。

基本类型的对象没有析构函数,所以回收基本类型组成的数组空间用 delete 和 delete[] 都是应该可以的;但是对于类对象数组,只能用 delete[]。对于 new 的单个对象,只能用 delete 不能用 delete[] 回收空间。Delete只能单个对象。

 

7.

函数模板

Temolate<typename T>

T fun(T x,T y)

{

T x;

}

 

8.结构体和类区别

C中   结构体不能定义函数

C++中  基本是一样的 默认的权限不同,struct默认public

 

9.抽象类 和 接口(虚基类)区别

只要一个成员函数为纯虚函数       接口所有成员函数都是纯虚函数

抽象类能够定义字段               接口不能出现字段

 

10.C++面向对象,开发效率高。兼容了C语言更接近底层,操作内存。

C++四种类型转换,C语言不易于查找,可以任意转换。C++要求严格。

Static_cast    常用类型转换f=static_cast<float>(i);

Const_cast    把const类型指针变为非const类型指针 *ptr =const_cast<int *>(fun(2,3))

Dynamic_cast 动态类型转换 子类和父类之间,上行,下行,类型检查virtual, Derived* d1 =Dynamic_cast<Dericed *>(b1);

Reinterpret_cast 重新解释 不同类型的指针类型转换

 

11.volatile 屏蔽系统对变量可能的优化;volatitle 这个关键字表述的问题一般都比较底层。表示每次都是从地址中读数据,而不是缓冲catch中。

1) 存储器映射硬件寄存器

2) 一个中断服务子程序中会访问到的非自动变量

3) 多线程应用中被几个任务共享的变量

 

12.Strcpy问题

可能出现的问题 溢出,导致后一个Buff被赋值,无论后面内存中的是什么,都将被覆盖,strcpy_s(dest,2,src)增加个大小。

 

13.inline作用

频繁调用,代码量小的函数。放在函数定义前。

与函数区别:函数调用时类似中断,转移到函数地址,执行,返回。

代码直接替换进程序。

 

14.explicit关键字

用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换(只能显示调用构造函数,不能隐式调用 “=”)

 

15.STATIC

静态全局变量    限制变量作用域,本文件有效

静态局部变量    只初始化一次

静态类成员      被所有实例共享

静态函数        不能被其他文件所用,其他文件可以定义相同名字的函数,不冲突

static全局变量只初使化一次,防止在其他文件单元中被引用;   
static局部变量只被初始化一次,下一次依据上一次结果值;   
static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝

 

16.VIRTUAL

vitual构造函数,虚拟指针和虚拟链表,静态联编

virtual析构函数,正确析构,析构函数一般都应该定义为virtual的,主要不是防止内存泄露,而是为了正确的析构。

多态情况下能够正确释放子类。

 

18.STL容器

 

19.拷贝构造函数,=重载

 A  b(a)(显示);   A  b=a(隐式);   //拷贝构造函数调用 ,深拷贝

 A  a;   A  b;   b =a;   //赋值运算符调用 ,浅拷贝
A(const A& a)

{

 N = new int[1] ;

Memcpy(n,a.n,10);

}

 

A& operator = (const A& a)

{

If(this = &a)

Return *this

If(n!=NULL)

{

Delete n;

N=NULL;

}

N = new int[1];

Memcpy(n,n.a,10);

Return *this;

}

 

String构造函数

String(const char *str)

{

If(str == NULL)

{

M_data = new char[1];

*m_data = ‘\0’;

}else

{

Int len = strlen(str);

M_data = new char[lenth +1];

Strcpy(m_data,str);

}

}

~string()

{

Delete[] m_data;

}

 

String(const String& other)

{

Int len = strlen(other.m_data);

M_data = new char[len+1];

Strcpy(m_data,other.m_data);

}

 

面试之C/C++

标签:

原文地址:http://www.cnblogs.com/dhuswy/p/5027478.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!