c++ 面试(一)

1.简述C/C++程序编译的内存分配情况

C、C++中内存分配方式可以分为三种

  1. 从静态存储区域分配: 内存在程序编译时就已经分配好,这块内存在程序的整个运行期间都存在速度快,不容易出错,因为有系统会善后。例如全局变量,static变量等。

  2. 在栈上分配: 在执行函数时,函数内局部变量的存储单元都在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。

  3. 从堆上分配: 即动态内存分配。程序在运行的时候用malloc或new申请任意大小的内存,程序员自己负责在何时用free或delete释放内存。动态内存的生存期由程序员决定,使用非常灵活。如果在堆上分配了空间,就有责任回收它,否则运行的程序会出现内存泄漏,另外频繁地分配和释放不同大小的堆空间将会产生堆内碎块。

注意

一个C/C++程序编译时内存分为5大存储区:堆区、栈区、全局区、文字常量区、程序代码区。 程序的局部变量存在于栈中,全局变量存在于静态存储区中,动态申请数据存在于堆中。

2.要求设置一绝对地址为0x67a9的整型变量的值为0xaa55。

int *ptr;

ptr = (int *)0x67a9;

*ptr = 0xaa55;

一个较晦涩的方法是:

*(int * const)(0x67a9) = 0xaa55;

3.C++的空类有哪些成员函数?

 1.   缺省构造函数
 2.   缺省拷贝构造函数
 3.   缺省析构函数 
 4.   缺省赋值运算符 
 5.   缺省取址运算符 
 6.   缺省取址运算符 const

4.谈谈你对拷贝构造函数和赋值运算符的认识

拷贝构造函数和赋值运算符重载有以下两个不同之处:
(1)拷贝构造函数生成新的类对象,赋值运算符不能;
(2)由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不需要检测原对象是否和新建对象相同,而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中有内存分配要先把内存释放掉

注意

当类中有指针类型的成员变量时,一定要重写拷贝构造函数和赋值运算符,不能使用默认的。

5。简述类成员函数的重写,重载,隐藏的区别

重载:在同一作用域,函数名相同,参数列表不同,返回值无所谓。
重写:不在同一作用域内(父类和子类);函数名相同,参数列表相同,基类函数必须有virtal修
饰,父子类中,函数的访问修饰符可以不同。
隐藏(重定义):不在同一作用域内;函数名相同,在父子类中只要不构成重写的都是隐藏。

6.请编写能直接实现strlen()函数的代码

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值