CC++ 基础知识点整理(一) 请简述C++语言中的标识符原则? 全局变量和局部变量在内存存储上有什么区别? 请简述return关键字的作用? 请简述头文件中使用#ifndef、#define、#endif的目的? 引用与指针有什么区别? 请简述面向对象的三个基本特征? 全局变量和局部变量在内存中是否有区别?如果有,是什么区别? C、C++语言中涉及到的所有内存类型及其各自的特点? 请简述malloc、free和new、delete的区别? 请简述重载与重写的区别? 结语

  • 答:标识符只能由字母、数字、下划线组成;标识符只能由字母、下划线开头;标识符不能是关键字。

全局变量和局部变量在内存存储上有什么区别?

  • 答:1. 全局变量存储在静态内存区,在程序进入入口点之前分配内存,在程序退出后释放内存,
  • 2.局部变量存放在栈内存区内,程序执行其定义语句时候分配内存,在退其所在作用域后释放内存。

请简述return关键字的作用?

  • 答:1. 结束函数执行。2. 在非void返回值类型的函数中返回值类型相同的表达式。

请简述头文件中使用#ifndef、#define、#endif的目的?

  • 答:防止头文件被同一份源文件重复包含。

引用与指针有什么区别?

  • 答:1. 引用必须被初始化,指针不必。
    2. 引用初始化以后不能被改变,指针可以改变所指的对象。
    3. 不存在指向空值的引用,但是存在指向空值的指针。

请简述面向对象的三个基本特征?

  • 答:1. 封装,将客观事物抽象成类,每个类对自身的数据和方法实行访问权限管理;
    2. 继承,即子类自动拥有父类的所有成员变量和成员函数,保护、公有成员可以被子类成员函数访问,私有成员不能被子类成员函数访问;
    3. 多态,简单地说就是通过相同的代码根据不同情况调用不同函数的过程,具体实现一般是父类指针指向子类对象调用子类对象的虚成员函数。

全局变量和局部变量在内存中是否有区别?如果有,是什么区别?

  • 答:全局变量储存在静态数据库,局部变量在堆栈。

C、C++语言中涉及到的所有内存类型及其各自的特点?

  • 答:1. 栈内存(stack),非静态局部变量和形式参数都在栈内存中,在执行非静态局部变量的定义语句的时候分配非静态局部变量的内存,在调用函数的时候分配形式参数的内存,在退出它们的作用域的时候释放内存。
    2. 静态内存(static),静态局部变量和全局变量都在静态内存中,在初次执行静态局部变量的定义语句的时候分配静态局部变量的内存,在进入入口点函数之前分配全局变量的内存,在退出入口点函数之后释放它们的内存。
    3. 堆内存(heap),C语言中使用malloc(calloc、realloc)、free函数分配和释放堆内存,C++语言中使用new(new [])、delete(delete [])关键字分配和释放堆内存,并且相比C语言的malloc(calloc、realloc)、free函数,它们还要执行类对象的构造函数和析构函数

请简述malloc、free和new、delete的区别?

    1. malloc是C语言中分配堆内存的函数,free是C语言中释放堆内存的函数;
    2. new是C++语言中分配堆内存的关键字,在分配了堆内存之后还会执行类对象的构造函数,delete是C++语言中释放堆内存的关键字,在释放堆内存之前还会执行类对象的析构函数。

请简述重载与重写的区别?

    1. 重载是指允许存在多个同名函数,而这些函数的形式参数表不同,可以是参数个数不同,可以参数类型不同,也可以两者都不同;
    2. 重写是指在类的继承体系下子类重新定义父类的虚成员函数。

结语

  • 冰冻三尺,非一日之寒。