C/C++及相关知识学习笔记

本文以FAQ的形式记录学习C/C++的过程。

Q:对C++比较全面的总结有哪些?

A:C++面试宝典2011版pdf下载

Q:C++面试资料知多少?

A:网站:IT公司面试手册

Q:C++是面向对象的,有那些特性?
A:面向对象的封装、继承和多态三大特性。封装是将客观事物抽象成类,每个类对自身的数据和方法实行保护,继承是使子类可以使用父类的功能,子类是父类的特例(添加一些功能);而多态使父类能使用子类的功能,子类是父类的扩展(允许将子类类型的指针赋值给父类类型的指针)。其他理解:封装可以使得代码模块化,继承可以扩展已存在的代码,他们的目的都是为了代码重用。而多态的目的则是为了接口重用。多态性可以简单地概括为“一个接口,多种方法”。

Q: 什么是野指针?

A:野指针就是就是指向不可用内存区域的指针

Q: 指针和引用有什么区别?

A:总的来说,在以下情况下你应该使用指针,一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。

Q:const如何使用?指向常量的指针和常量指针的区别是什么?

A:const int a;  // const常量     const int *a; //指向常量的指针     int *const a=&n; //常量指针

Q:c++是如何管理内存的?

A:内存分配方式有三种:(1)从静态存储区域分配。(2)在栈上创建。(3) 从堆上分配,亦称动态内存分配。静态存储区:内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。它主要存放静态数据、全局数据和常量。

Q:什么是静态(static)数据成员?静态(static)成员函数?

A:静态数据成员被类的所有对象所共享,包括该类派生类的对象。即派生类对象与基类对象共享基类的静态数据成员。

Q:“return不能返回指向栈内存的指针或引用”如何理解?

A:看讨论帖。

Q:如何区别C++中的覆盖,重载,隐藏和多态?

A:C++面试宝典2011版第36问给出了C++中覆盖,重载及隐藏的区别。多态分静态多态和动态多态。静态多态性:函数重载,运算符重载;动态多态性:虚函数。

成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。
多态是指派生类函数多态基类函数,特征是:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
覆盖多态特征一样:
(1)不同的范围(分别位于派生类与基类);
(2)函数名字相同;
(3)参数相同;
(4)基类函数必须有virtual 关键字。
由于C++的多态性是通过虚函数来实现的,所以函数的覆盖总是和多态关联在一起。在函数覆盖的情况下,编译器会在运行时根据对象的实际类型来确定要调用的函数。
“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:
(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏(注意别与多态混淆)。

Q:JAVA中虚函数,抽象函数,抽象类,接口这些概念与C++中的相同吗?

A:一个总结相关知识的帖子。

Q:什么是拷贝构造函数?如何使用?

A:拷贝构造函数是一种特殊的构造函数。通常的使用原则是,1 对于凡是包含动态分配成员或包含指针成员的类都应该提供拷贝构造函数;2 在提供拷贝构造函数的同时,还应该考虑重载"="赋值操作符号。(百度百科

Q:C/C++中结构体和联合体有什么区别?

A:联合是共址的,结构是异址的。链接1链接2

Q:C++是面向对象的,有哪些类间关系?

A:看看UML中的几种类的关系。

Q:C++是类型安全的吗?

A:不是。类型安全很大程度上可以等价于内存安全,类型安全的代码不会试图访问自己没被授权的内存区域。

Q:C++中的四种类型转换及区别?

A:基本类型转换用static_cast;多态类之间的类型转换用daynamic_cast;去const属性用const_cast;不同类型的指针类型转换用reinterpreter_cast。链接1链接2

Q:指针和数组有什么区别?

A:指针存储数据的地址,数组存储数据本身。链接1

Q:C++对象多继承内存结构怎么回事?

A:入门;可能需要看侯捷的书

Q:strcpy如何工作?A:看试题分析。

Q:C和C++中的struct有什么区别?

A:C中struct只可以放成员变量,没有访问权限限制,外部可以访问;
C++中struct用法对C中struct进行了扩展,功能与class类似,可以放成员函数,可以被继承,所有成员数据默认权限为public,struct不可以定义无参的构造函数。

Q:const函数?

A:如成员变量 void f() const{xxx},用const修饰函数,不能修改该类的数据成员,如果要修改该类中的成员函数,需要在成员函数前加mutable。

Q:char a[];a="abc";为什么这种写法不对?

A:字符串“abc”是一个常量,存储在静态存储区。

char a[10];是一个字符数组,字符数组的名字a可以自动转换为字符指针,但是指针a只能指向数组分配空间的地址,如果超出该地址,则访问了不可访问的存储区域。
char *p;p是一个字符指针,p可以指向任意字符,不是局限在某个内存区域。
字符串等价于字符数组。
字符数组的名可以自动转化为字符指针。
这么写正确:char *p;p="abc";
因为:"abc"是常量,存储在静态储存区,p可以指向任意位置的字符。
这么写错误:char a[10];a="abc";错误原因是,"abc"是常量,存储在静态储存区,a是字符数组名可以自动转换为字符指针,但该指针只能指向数组内部空间,不能指向其他空间(如静态存储区),所以错误。

参考1.

Q:sizeof()注意事项有哪几个?

A:

1,对齐,默认对齐是8位,如果结构体中最长数据成员如果小于CPU位数长度,则将最长数据成员的长度设置为对齐长度。

2,结构体中的static变量所占空间不计算,

3,对齐时,成员变量的顺序影响sizeof大小,如bool,double,bool,sizeof果是24;bool,bool,double,sizeof结果是16,

4,strlen计算的的字符串的长度,不包括‘\n’符号。 

Q:delete 好delete[] 区别?

A:Obj *p=new Obj[n]; delete删除的是Obj[0],而没有删除Obj的其他元素,delete[]删除的是Obj[0]到Obj[n-1]的所有元素。详细解释


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值