zoukankan      html  css  js  c++  java
  • [c++] 基本概念

    1. 指针是c/c++特有的吗?每种编程语言都使用指针,但Java、c#等将指针隐藏,而c/c++将指针暴露给了程序员   
    2. 如何理解符号表?记录变量名及变量对应的地址。在编译时生成,生成后不可改
    3. c++中的内存有哪几种?如何分配?存储什么内容?静态存储区、栈存储区、堆存储区。静态存储区在编译时分配,在程序的整个运行期间都存在,存储全局变量、static变量;栈区函数执行时分配,在函数运行期间存在,存储函数中的临时变量;堆区由程序员自己分配,自己删除
    4. 栈内存和堆内存的区别?栈内存保存堆内存的地址,堆内存保存真正数据
    5. 内存中供用户使用的存储空间划分为哪几部分,分别存储什么类型的变量?程序区、静态存储区(全局变量)、动态存储区(函数形参、自动变量等)
    6. 成员变量(Fields)、参数(parameter)和本地变量(Local Variable)的区别?参数和本地变量相同,存储在栈中。成员变量在类中定义,本地变量在函数中定义。作用域:成员变量在类的所有函数中都可直接用,本地变量在本函数中使用;生命周期:成员变量在对象的生成期中永远存在,本地变量随函数存在。(成员变量在类的每个对象中,一般为私有,不能通过.访问)
    7. public、private、protected的区别?public:共有;private:私有,只有该类的成员可访问;protected:保护,只有该类及其子类的成员可访问
    8. 变量和函数在声明时的两个属性是什么?数据类型(整型、字符型),数据存储类别(在内存中存储方式,分静态、动态两类,根据存储类别可知变量的作用域与生存期)
    9. 变量根据作用域可分为哪两类?局部变量(在函数内部定义)、全局变量(在函数外部定义)
    10. 变量根据生存周期(存储类别)可分为哪两类?静态(程序运行期间由系统分配固定的存储空间)、动态(程序运行期间根据需要动态分配存储空间)
    11. 声明(declaration)定义(definition的区别?对于函数区别明显;c中,对于变量,声明包括定义(如int a;),但并非所有的声明都是定义(如extern a;),一般把需要建立存储空间的声明称为定义,不需建立存储空间的声明称为声明;c++中,类的成员变量就是声明,而非定义,因为没有分配内存(声明:(告诉编译器)知道有一个i,但不知道在哪里;定义:i在这里)
    12. 初始化和赋值的区别?初始化指在创建变量时赋予其一个初值,赋值指把对象的当前值擦除,以一个新值代替之
    13. .h文件和.cpp文件的区别?本质上没有区别,按照程序员的习惯(约定俗成),.h为头文件,.cpp为程序文件
    14. c++中作用域如何分隔?以“{}”分隔
    15. ::是什么意思?域解析符(也称作用域运算符或作用域限定符),用来连接类名和函数名,指明当前函数属于哪个类
    16. ->的含义?取成员,通过结构体(类)指针取得结构体(类)的成员(可读作“的”)
    17. &和*的含义?由上下文决定。在声明语句中,&为引用,*为指针;在表达式中,&为取地址,*为解引用(返回内存地址中保存的值)
    18. 介绍c++中两种主要的复合类型及其区别?引用、指针。引用与变量绑定,不是对象(一旦绑定,无法改变),必须初始化(引用是某块内存的别名,程序不会为引用分配内存);指针指向,是对象(允许赋值、拷贝),可以不初始化(指针指向一块内存,其内容是所指内存的地址)。
    19. 指针的使用有何注意事项?未经初始化的指针会引发错误;尽量等定义了对象后再定义指向它的指针
    20. 如何理解c++的分离式编译机制?将变量的声明定义分离的机制。声明规定了变量的类型和名字,即使一个名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。定义则负责创建与名字关联的实体,以及申请存储空间。将声明和定义分离,可方便将程序分为许多文件,并在文件中共享代码
    21. int (*p)(int,int)与int *p(int,int)的区别?前者为函数指针,p是指向函数入口地址的指针变量(地址);后者为指针函数,*表示函数p的返回值是指向整型变量的指针
    22. int (*p)[4]与int *p[4]的区别?前者为数组指针,p为指向一维数组的指针变量(地址);后者为指针数组,*代表数组p的每个元素均为指向整型变量的指针
    23. int p[4]与int (*p)[4]中p的区别?前者中p为数组首元素地址;后者中*p为数组首元素地址,p为双重指针
    24. 数组名和函数名各代表什么?数组名代表数组首元素的地址,函数名代表函数的入口地址
    25. 什么是虚函数?通过指针调用派生类的成员函数,实现多态
    26. 句柄和指针的区别?
    27. 函数的参数传递有哪两种机制?引用传递(passed by reference)、值传递(passed by value)。形参为引用类型时,与实参绑定;否则,将实参的值拷贝给形参
    28. 什么是运算符重载,有什么用,如何定义?有特殊名字的函数,由operator和后面的符号构成。根据需要改变运算符(+ - * / 等)的行为。设计类时,首先考虑这个类需要提供哪些操作,然后确定把每个类操作设计成普通函数还是重载的运算符,通常在逻辑上与运算符功能相关的操作适合定义成重载的运算符
    29. 赋值运算符在定义时应注意什么?必须定义成类的成员,返回左侧运算对象的引用
    30. 什么是函数模板?合并名字相同,参数不同的函数,方便实现函数重载和泛型
    31. 程序错误有哪几类,如何避免?语法错误(编译)、逻辑错误(调试)、运行错误(异常机制)
    32. 创建对象有哪两种机制,有什么区别?
    33. 对象的创建包含哪两个阶段?1、分配内存;2、初始化(调用构造函数)
    34. 多态的实现方式:函数重载、运算符重载、虚函数。前两种编译时实现,后一种在运行时实现
    35. 什么是宏?一种替换机制(批处理),在预处理阶段展开,程序随之变长
    36. C/C++的预处理功能有哪几种?宏定义,文件包含,条件编译(满足条件了才编译)
    37. 什么是构造函数?用于对象初始化,创建对象时自动调用,没有返回值
    38. 什么是析构函数?与构造函数相对,销毁对象时系统自动调用。进行清理工作,例如释放分配的内存、关闭打开的文件等。没有参数和返回值
    39. 什么是内联函数,如何声明?为了消除函数调用的时空开销,C++ 提供一种提高效率的方法,即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开。可将短小的、频繁调用的函数声明为内联函数。声明函数时加关键字inline
    40. 什么是局部变量和外部变量,如何声明?static,extern
    41. 什么是内部函数和外部函数,如何声明?二者区别:能否被其他文件调用。内部函数:只能被本文件中的其他函数所调用,即作用域仅局限于所在文件。通过static声明;外部函数:可被其他文件调用。通过extern声明(默认)
    42. 函数的声明和定义在语法上如何区分?声明没有{}
    43. auto在c中有什么用法?函数中的局部变量如果不声明为static,默认为auto即动态分配存储空间,函数结束后释放
    44. static在c中有什么用法?对局部变量使用,可使变量在整个程序执行期间不释放;对全局变量使用,可使变量的作用域限于只限于本文件(模块)中
    45. extern在c中有什么用法?外部变量是在函数外部定义的全局变量,作用域是从变量定义处到文件末尾。如果定义点之前的函数想引用该变量,要在引用前用关键字extern对变量作“外部变量声明”,以扩展其作用域
    46. extern在c++中有什么用法?为方便分离式编译,如果想声明一个变量而非定义它,就在变量名前添加extern关键字。将一个变量声明为extern就表示承诺在程序的其他位置有该变量的一个非extern定义。一个给定的变量可能有多个extern声明,但必须只有一个定义
    47. struct和class的区别?
    48. include" "和< >的区别?前者在.cpp所在目录找,后者在系统目录找
    49. 类的组成?成员变量和成员函数,类不是实体,只有实体才有变量,变量是属于对象的,不属于类,函数是属于类的,不属于对象。所有类的对象用到的函数是同一个,而类的变量只有创建对象时才会产生。当不同的对象调用同一个函数的时候,编译器可以知道是哪个对象在调用它,并把变量与之关联上(通过this实现)
    50. 创建对象的两种方式?有什么区别?在栈上创建和在堆上创建。在栈上创建对象使用“类名 对象名”创建,对象在离开作用域后自动删除,使用"."访问对象的的方法;在堆上创建的对象使用“类名 对象地址 = new 类名”创建,对象需使用delete手动删除,使用"->"访问对象的方法   
    51. 什么是对象?一块能存储数据并具有某种类型的内存空间
    52. 类的基本思想?如何实现?数据抽象和封装。通过接口和实现分离实现
    53. 基本内置类型包括哪几类?算数类型(又分为字符、整型、布尔、浮点)和空类型
    54. 类的静态成员有何特点,如何使用?类的静态成员不与对象绑定,必须在类的外部定义和初始化
    55. 声明语句的组成?基本数据类型+声明符
    56. const的用途?修饰变量,以说明它是不可变的
    57. 函数由哪几部分构成?返回类型、函数名字、形参列表、函数体
    58. 什么是函数重载?同一作用域内的几个函数名字相同但形参列表不同
    59. VS、VC、MFC是什么?VS >VC >MFC 微软基础类库(Microsoft Foundation Classes)
    60. 什么是MSDN?微软开发者网络(Microsoft Developer Network),VS的帮助文档
    61. 什么是GDI?图形装置界面(Graphic Device Interface)
    62. 如何理解设备描述表?
    63. "?"的用法?三目运算符,a?b:c 代表首先对表达式a进行判断,True则返回b,False则返回c
    64. friends的用法?一旦声明其他类为friends,这个类就可以访问本类的私有成员。可用于运算符重载
    65. c++中class和struct的区别?class默认private(常用),struct默认public(用于简单类)
    66. 初始化列表和构造函数初始化的区别?初始化列表是初始化+赋值;构造函数只赋值。实际使用中通常通过初始化列表完成初始化
    67. 对象组合的用法?是一种软件重用的方式(composition)[另一种是继承],把已有对象组合成一个新的对象,一个类的成员变量是另一个类的对象;fully——一部分[孩子出生前];by reference——知道在哪(指针)[孩子出生后];从语义上理解,定义一个员工类,员工的姓名,工号是fully对象,员工的上级是by reference的员工类对象
    68. 如何理解c++的内存模型?提供fully和by reference两种方式(指针对编译器来说就是地址,不需要知道指向的细节)。java中只有by reference
    69. 如何实现规范编码?语言可提供灵活的手段,但实际使用中要受编程模型的限制(如OOP),以保证编码的规范可扩展性

     

    参考:

    • 指针
      • https://www.cnblogs.com/gxcdream/p/4805612.html
    • .h文件
      • https://zhidao.baidu.com/question/554429813.html
    • 句柄和指针
      • https://blog.csdn.net/perfectguyipeng/article/details/71189822
    • 创建对象
      • https://www.cnblogs.com/techyc/p/3257575.html
    • extern
      • https://www.cnblogs.com/broglie/p/5524932.html
    • struct/class
      • https://www.cnblogs.com/ccsccs/articles/4025215.html
    • 设备描述表
      • https://blog.csdn.net/wenzhou1219/article/details/22325247
  • 相关阅读:
    Python SOCKET网络编程
    网络基础 -- 子网划分
    网络基础 -- 网络协议篇
    面向对象练习:学生选课系统
    python 异常处理 断言
    Python 面向对象 中高级
    Python 面向对象 基础
    Python 练习
    Python 练习计算器
    Python 正则表达式
  • 原文地址:https://www.cnblogs.com/cxc1357/p/10440988.html
Copyright © 2011-2022 走看看