21.内存分配方式有哪几种?
1.静态存储区域.在编译过程中就分配好了,整个程序运行期间都存在.用来存放全局变量.
2.栈区,在函数执行的过程中,函数内部的局部变量存放地址在栈区中创建,函数执行结束会被自动释放,这个区域的效率很高,但是容量有限
3.堆区,通过动态内存分配划分而来的区域.可以任意分配空间的大小,动态内存的生存期有我们自己决定,使用非常的灵活,问题也多
22.全局变量和局部变量的区别,怎们实现,操作系统和编译器是怎们知道的?
区别:生命周期不同:全局变量实在编译时创建,程序结束时销毁,临时变量在函数执行是分配空间,函数结束时销毁.
作用范围不同:全局变量在整个代码中都可以使用,局部变量只能在所在的函数体中.
存储位置不一样,全局变量存放在数据区,局部变量存放在栈区.
操作系统和编译器是通过内存分配的位置来区分全局变量和局部变量的.
23.c++中explicit和protected是什么意思?
explicit和proctected都是关键字
explicit可以用来修饰类的构造函数,说明这个函数不接受类型的强制转化.
protected是类中的访问控制权限,可以修饰类中的成员,可以用来修饰继承.
修饰类的成员时候表示只有类的成员函数和类的派生类的成员函数可以访问.
24.重复fclose一个打开之后的FILE *fp指针会出现什么样的结果.
FILE是一个结构体,这个结构体是通过动态内存分配获取的.fclose的操作是释放动态内存分配的空间,多次调用,会出错.
25.为什么数组作为参数名的时候,数组的内容可以被改变,而他的类型int不会被改变.
数组作为参数时,传递的是数组的第一个参数的地址.通过地址,我们可以修改函数的值.
而int类型,传递函数中的是一个形式参数,这个参数是对实参的拷贝,并不会对实参有任何影响.
26.你觉得如果不使用常量,直接在程序中填写数字或字符串,将会有什么麻烦?
1.程序的可读性差.程序员会忘记他们的含义
2.容易发生错误
3.不适合开发.
27.为什么要使用动态内存分配?,或者为什么要用堆空间.
只有运行时候.我们才知道一个对象需要多少的内存空间.而且我们也不知道对象的生存周期是多长.
28.关键字const有哪些用法?
1.阻止一个变量的改变,用来修饰常变量.
2.对于指针来说,可以修饰指针,也可以修饰指针所指的值
3.在函数声明中,表示一个形参的值不会改变.
4.修饰类的成员函数,表示这个函数不会修改其他成员的值
29.是不是一个父类写了一个 virtual 函数,如果子类覆盖它的函数不加函数,如果子类覆盖它的函数不加 virtual , 也能实现多态? ?
virtual的函数是隐藏继承的,父类中声明为virtual函数,子类中也会被自动继承为virtual.所以可以加,也可以不加.
30.面向对象的三个基本特征,并简单叙述之?
继承:子类,父类;子类拥有父类的属性,是对父类的扩充
封装:通过把使用抽象成类,然后实现类
多态:可以使用子类给父类进行赋值.
31.解释下面的词语,重载(overload),重写(覆盖override),重定义(隐藏redefinition)
重载:多个函数的名称一样,但是参数列表不一样.
重写:用于继承,子类重新定义父类中的虚函数.
重定义:用于继承,子类重新定义父类中的函数.
重定义包括重写.
32.多态的作用是什么?
1.隐藏代码的细节,是代码能过模块化
2.接口的重用,
33.如果ClassA中定义并且实现了虚函数int func(void),classB中也实现了这个函数,如果定义一个B的对象c,c.func()调用的是哪一个函数.如果A中的不是虚函数,情况又如何.
A * a = new B ;
因为是虚函数,所以调用的是B的函数
如果不是虚函数,调用的是A的函数
34.C++ 里面是不是所有的动作都是 main()引起的?如果不是,请举例。
不是,全局变量的定义,就是不再main中执行的.
35.内联函数和宏定义的区别是什么?
宏定义是由预处理阶段替换的,并不会检查参数列表,返回值类型.
内联函数是在编译器替换的,需要检查参数列表返回值之类的.他的作用是较少,调用程序过程中的上下文切换.
36.析构函数和虚函数的用法和作用?
析构函数是类中特殊的成员,他和构造函数一样,没有返回类型,而且没有参数,不能随意的被调用,无法重载,只有在类的生命周期结束的时候,由系统自动带哦用,释放内存空间.
虚函数是c++中多态的一种实现方式,通过使用虚函数,我们可以动态的绑定成员函数和对象.实现动态联编.
37.c++中什么是纯虚函数,什么是抽象类,什么是纯虚函数,有没有纯虚构造函数,
纯虚函数是只有定义没有实现使用virtual声明的函数.
抽象类是含有纯虚函数的类,不能实例化成对象.
虚函数,用于动态联编,实现多态,
没有纯虚的构造函数.只有虚的构造函数.
38.c++中基类和派生类的构造函数,析构函数的执行顺序?
c++中构造是先执行基类的构造函数,然后在执行派生类的构造函数.
c++中析构函数是先执派生类的析构函数,然后在执行基类的析构函数.
39.在c++中class和struct的区别:
只有访问权限不一样,
继承:class是private,strcut是public
默认:class是private,strcut是public.
40.c和c++的有不同的地方?
struct有很大的不同,不具有成员函数,不能继承.
c++中有内联函数,c中没有
c++中有bool类型,c中没有
c++中有引用,c中没有