C++常见问题的总结

1、C语言跟C++的关系:

(1)C语言跟C++的本质区别:

           1)、c更倾向于面向过程,c++是面向过程+面向对象+泛型编程

           2)、c解决问题的思路如何通过一个过程来实现我们想要的功能,更注重的是算法;c++是             先构造一个对象模型,然后通过调用成员函数来实现相应的功能

           3)、C和C++动态管理内存的方法不一样,C是使用malloc/free,而C++除此之外还有                  new/delete关键字。

          4)、C++支持函数重载,C不支持函数重载 

          5)、C++中有引用,C中不存在引用的概念

 (2)C语言跟C++的结构体区别:

          1)、c的结构体不能定义函数,但c++的可以

          2)、c的空结构体大小为0,c++的为1

   (3)  g++如何调用c库函数:

          1)、在c库的.h文件中对于函数的声明前要加extern "C",告诉g++不要对以下的函数名重命名

          2)、如何区分此时用的是g++还是gcc?(1、g++中有__cplusplus这个宏,gcc没有;

                2、sizeof(‘字符常量’)g++结果是1,gcc是4)

2、malloc和free、new和delete的问题

(1)malloc和free、new和delete的区别:

  1. malloc和free是标准c库的函数,new和delete是c++的运算符
  2. Malloc需要强制类型转换,而new不需要
  3. Malloc需要计算开辟空间的大小,而new不需要

(2)为什么有了malloc和free,还要有new和delete?

      因为malloc和free是c库函数,不会自动调用构造和析构,而new和delete会.。这样就会产生内存泄漏。

3、引用和指针的区别:

 (1)本质区别:

      引用是变量的别名,是直接访问变量,指针存放的是变量的地址,需要单独开辟空间,访问变量是间接访问

(2)形式上的不同:

(1)引用不开辟空间,指针开辟空间

(2)引用必须初始化,指针可以不用初始化

(3)引用自加是变量自加,指针自加表示指针向地址增大的方向移动了一个数据

(4)指针可以赋值为NULL,但引用没有

(5)有void *类型的指针,但是没有void类型的引用

(6)指针有二级指针,但引用没有

(7)指针有函数指针、数组指针,但引用没有

(8)指针只能指向字符串常量,但常引用可以是任何类型常量的别名

4、Static的作用:

在C语言:

1、修饰局部变量延长了生命周期 2、修饰全局变量限制了作用域;修饰函数限制了作用域

在c++:

(1)修饰成员变量:

1、类内声明类外定义,因为static修饰的成员变量在编译阶段就开辟了空间,而类的定义不开辟空间,声明不开辟空间。2、属于整个类,所有对象共享;先于对象而存在 。3、如果是私有的,可以通过留static的成员函数作为公有的接口,在类外直接通过类名访问。 4、如果是公有的,可以直接在类外通过类名::被访问。

(2)修饰成员函数:

  1. 可以直接通过类名加作用域访问
  2. 没有this指针,不能访问非静态成员
  3. 非静态的成员函数可以访问静态成员

5、const的作用: 

1、在C++中:

(1)const修饰成员函数:

  1. const修饰的成员函数中不能修改任何成员变量的值
  2. Const看似在修饰成员函数,实则是在修饰这个成员函数的第一个形参this
  3. 常成员函数只能调用常成员函数

(2)const修饰的对象:

  1. 不能作为左值
  2. 只能调用const修饰的成员函数
  3. 不能修改成员变量的值

2、在C语言中:

    1、对变量声明只读特性,保护变量值以防被修改。

    2、节省空间,避免不必要的内存分配。const修饰的变量在程序运行过程中只有一份拷贝。

6、重载、覆盖、重写的区别: 

(1)重载:功能类似,函数名相同,参数不同(个数和类型),与返回值无关

    特征:相同范围(同一个类中)、函数名字相同、参数不同、virtual关键字可有可无

(2)覆盖:子类覆盖父类的虚函数,实现接口的重用

   特征:不同范围(基类和派生类)、函数名字相同、参数相同、基类中必须有virtual关键字(必须是虚函数)

(3)重写:子类定义了与父类一模一样的虚函数

  特征:不同范围(父类和子类)、函数名字相同、参数不同或者参数相同且无virtual关键字 

7、虚函数是怎么实现的 

每一个含有虚函数的类都至少有有一个与之对应的虚函数表,其中存放着该类所有虚函数对应的函数指针(地址),

类的示例对象不包含虚函数表,只有虚指针;

派生类会生成一个兼容基类的虚函数表。

8、什么情况下会调用拷贝构造函数(三种情况)

1)用类的一个对象去初始化另一个对象的时候

2)当函数的参数是类的对象时,就是值传递的时候,如果是引用传递则不会调用

3)当函数的返回值是类的对象或者引用的时候

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值