C++笔记整理(一)

1.C++中不能重载的六个运算符号:.,::,?,sizeoftypeid*

2.构造函数是否可以是虚函数?析构函数呢?

答:构造函数不可以,虚函数是借助于虚函数表,而且是通过虚函数指针找到虚函数表,然而虚函数指针存在于对象之中,要有个对象才行,而调用构造函数的时候对象还没有建立,没有建立怎么会有虚函数指针呢?所以不可以。

    析构函数可以当一个父类的析构函数被声明为虚函数的时候,我们delete一个指向子类对象的父类指针的时候,实际调用的是子类的析构函数,但是子类析构函数会自动引发父类的析构函数的调用,从而使子类特有的部分和从父类继承的部分能够释放,我们一般把父类的析构函数声明成虚函数,尽管这个析构函数什么都不做。(最好是把基类的析构函数定义为虚函数,否则当用基类去创建一个指向派生类的指针,当其释放的时候基类中的东西可能不会被释放,造成内存泄漏)

3.虚函数是否可以是内联函数

答:不可以,虚函数是通过虚函数表,这是在运行的时候确定的,然而内联函数的替换是在编译阶段,编译的时候不知道调用哪一个虚函数所以不可以。(编译时静态的,运行是动态的)

5静态成员函数是否可以是虚函数?

答:不可以,静态成员函数不属于哪个类,而虚函数通过虚函数指针找到虚函数表,虚函数依赖于对象指针,而静态函数不属于某各类,所以不可以。

6虚函数表和虚函数指针在运行,编译时建立?

答:虚函数表是在编译时建立,在编译的时候把类中的虚函数地址放到虚函数表中,构成一个指针数组。

虚函数指针是在运行时建立的,他也是类的隐藏的成员,他在调用构造函数的时候执行,构造函数执行完以后虚函数指针初始化好(构造函数在运行时调用的)

7.constdefeine的区别?

答:const有数据类型而ddefine没有编译器对const进行类型安全检查,而对define只是简单的字符替换,没有安全检查,而且会引起错误。

8.什么是虚函数?纯虚函数?什么是抽象类?纯抽象类?纯抽象类的作用?

答:虚函数:被virtual修饰的成员函数。(构造函数,静态成员函数和全局函数不能被声明为虚函数)

纯虚函数:virtual  函数返回值 函数名()= 0

抽象类:有纯虚函数的类是抽象类。(不能创建抽象类的对象,当做一个接口类使用)

纯抽象类:除了构造函数与静态成员函数意外都是纯虚函数的类。

9.newdeletemallocfree关系?

答:delete会调用对象的析构函数,new对应free只会释放内存,new调用构造函数。mallocfreeC++/C语言的标准库函数,new/deleteC++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++语言需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。注意new/delete不是库函数。

10.deletedelete []区别?

答:当做用于一个数组时,delete只调用一次析构函数,而delete[]释放每一个的内存,调用每一个析构函数。Deletenew配合,delete[]new[]配合。

11.函数指针?

答:函数指针的生命更只需呀把指针替换函数名就可以。

void * ( * (*fp1)(int))[10];

float (*(* fp2)(int,int,int))(int);

int (* ( * fp3)())[10]();

分别表示什么意思?                                                         

1.void * ( * (*fp1)(int))[10];   fp1是一个指针,指向一个函数,这个函数的参数为int型,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个void*型指针。

2.float (*(* fp2)(int,int,int))(int);   fp2是一个指针,指向一个函数,这个函数的参数为3int型,函数的返回值是一个指针,这个指针指向一个函数,这个函数的参数为int型,函数的返回值是float型。

3.int (* ( * fp3)())[10]();   fp3是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是一个指针,这个指针指向一个数组,这个数组有10个元素,每个元素是一个指针,指向一个函数,这个函数的参数为空,函数的返回值是int型。

  网上搜集的和自己总结的,如有错误,敬请指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zero游戏开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值