linux下c/c++语法知识点归纳和总结(1)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了linux下c/c++语法知识点归纳和总结(1),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5428字,纯文字阅读大概需要8分钟。
内容图文
![linux下c/c++语法知识点归纳和总结(1)](/upload/InfoBanner/zyjiaocheng/933/4a116d35f82543db857e13055114b8eb.jpg)
C++申请动态内存
在c++中,申请动态内存是使用new和delete,这两个关键字实际上是运算符,并不是函数。
而在c中,申请动态内存则是使用malloc和free,这两个函数是c的标准库函数,使用它们必须包含stdlib.h,才能编译通过。
new/delete和malloc/free的相同之处在于,new和malloc都是手动申请动态内存,释放时new则需要delete释放内存,而malloc则需要free释放内存。
它们的不同之处在于,new和delete会自动调用对象的构造和析构函数,而malloc/free则只申请内存。
另外需要注意的是:new的不是数组的话,则直接delete就好,并且只会调用一次析构函数,而new[]的话,则需使用delete[]来释放,并且数组中每一个元素都会调用一次析构函数,调用完析构函数再释放内存。
C++继承的优缺点
优点:类继承是在编译时刻静态定义的,且类继承可以较方便地改变父类的实现,实现函数的重用。
缺点:首先,因为继承在编译时刻就定义了,所以无法在运行时改变从父类继承的实现,其次,父类一般至少定义了子类的部分行为,父类的任何改变都可能影响子类的行为,也就是说,如果继承下来的实现不适合子类的问题,那么父类必须重写或者被其他的类替换,这种依赖关系限制了灵活性。
从以上对比看,同一种属性既可以是优点,从另外的方面来讲,又是缺点,就看个人在编程过程中的灵活运用了。
C++的三大特性
封装、继承、多态。
封装是一种技术,它使类的定义和实现分离;
继承,从广义上讲,继承有三种实现方式,其一,为实现继承,指使用基类的属性和方法而无需额外编码,其二,可视继承,即子窗体使用父窗体的外观和实现代码,其三,则为接口继承,即仅仅继承属性和方法,实现则滞后到子类去实现,也就是父类使用的是纯虚函数,或者重写父类接口方法,则是虚函数,例如多态的实现就使用了接口继承。
多态,简单来讲,就是父类定义了虚函数,子类重新实现该函数,那么当父类指针指向子类时,会调用子类的该方法,这,就是多态。
子类和父类调用构造函数和析构函数的先后顺序
子类对象定义时,先调用父类的构造函数,再调用子类的构造函数;
子类对象销毁时,先调用子类的析构函数,再调用父类的析构函数。
什么是引用
引用,其实就是给变量取了一个别名,声明引用时要切记初始化,且引用本身不占存储单元,纯粹就是变量多了一个名称而已。
将引用作为函数参数有哪些特点
一是,使用引用传递参数是直接对实参本身进行操作,当需要在函数内部修改传递进来的变量并传出去时,可使用引用;
二是,作为函数参数时,引用是无需重新分配存储空间的,那时引用只是作为别名使用,但指针却需要,所以有时使用引用会更有效率;
什么时候需要使用常引用
当既要使用引用提高程序的效率,又不能在函数内部修改实参的值时,可使用常引用。
将引用作为函数返回值类型的好处和需遵循的规则
好处:在内存中不产生被返回值的副本
需遵循的规则:
不能返回局部变量的引用;
不能返回函数内部动态分配的变量的引用,因为引用只是作为一个临时变量的出现,并未赋予一个实际的变量,该引用所指向的空间无法被释放;
可以返回类成员的引用,但最好是const类型;
为了保证连续使用流操作符(<< >>)重载返回值时,操作的是同一个对象,流操作符重载返回值应该声明为引用
±*/这四则运算符不能返回引用
引用和多态的关系
引用是c++中另外一种实现多态的手段,与指针一样,也是基类的引用可指向派生类的实例。
指针和引用的区别
指针通过某个指针变量指向某个对象后,对指针所指向的对象间接操作;
引用本身就是变量的别名,所以对引用操作就是直接对所指向的变量进行操作;
引用不会重新分配存储空间,但指针却需要重新分配存储空间;
关联、聚合、组合的区别
主要是在画uml类图时,有关联、聚合和组合的说法。
关联,是一种很弱的联系,指的是两个类之间有某种联系,比如一个类实例作为另一个类方法的参数;
聚合,指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系;
组合,也表示类之间整理和部分的关系,但是组合关系中部分和整体具有统一的生存期,一旦整体对象不存在,部分对象也将不存在;
聚合和组合的区别:就是聚合关系中部分事物和整体事物生存期无关,举个浅显的例子,国和家,国没了,家也就不存在了,这是组合关系,而计算机和它的外设之间,计算机没了,硬件设备还存在,这是聚合关系。
多态(也叫重写和覆盖)的作用
隐藏实现细节,使得代码能够模块化,进而扩展代码模块,实现代码的重用;
在继承的同时,每一个派生类都有属于自己的独特的方法,实现接口的重用。
什么情况下只能使用类构造函数初始化表而不能赋值
当类中含有const、reference(引用)成员变量时,类的构造函数都需要初始化表。
c++是否是类型安全的
不是,c++是可以进行强制类型转换的。
main函数执行以前会执行什么代码
全局对象的构造函数会在main函数之前执行。
描述内存分配方式以及它们的区别
一是从静态存储区域分配,内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在,例如全局变量和static变量;
二是从栈上创建,一般是局部变量在栈上创建,当超过该变量的作用域时该变量被自动释放;
三是从堆上手动分配,一般动态分配内存都是在堆上创建。
struct和class的区别
struct的成员默认是公有的,class的成员默认是私有的;
当类中有很少的方法并且有公有数据时,应该使用struct关键字,否则使用class关键字。
在8086汇编下,逻辑地址和物理地址是怎样转换的
通用寄存器给出的地址,是段内编译地址,相应段寄存器地址*10H+通用寄存器内地址,就得到了真正要访问的地址。
请说出const和#define相比,有什么优点
const常量有数据类型,而宏定义没有数据类型;
部分调试工具可以对const进行调试,但是宏常量不行。
简述数组和指针的区别
数组要么在静态存储区创建,要么在栈上创建,指针可以随时指向任意类型的内存:
修改内容上的差别:
char a[] = “hello”;
a[0] = ‘X’;//正确,编译和运行都不报错
char *p = “hello”;//注意p指向常量字符串
p[0] = ‘X’;//不正确,编译不报错,运行时报错
sizeof计算容量时,数组得出字节数,指针则是4个字节
【文章福利】小编推荐自己的Linux、C/C++技术交流群:【960994558】整理了一些个人觉得比较好的学习书籍、视频资料 共享在里面(包括C/C++,Linux,Nginx,ZeroMQ,MySQL,Redis ,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker, TCP/IP,协程,DPDK等等.),有需要的可以自行添加哦!~
内容总结
以上是互联网集市为您收集整理的linux下c/c++语法知识点归纳和总结(1)全部内容,希望文章能够帮你解决linux下c/c++语法知识点归纳和总结(1)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。