1.inline可以是虚函数吗
语法层面可以是 但是实际效果 编译器会忽略inline属性 因为虚函数的地址会被放到虚表 如果inline起作用的话 怎么通过虚表调用虚函数
对于比较短的函数 编译器会默认处理成inline
声明定义分离就不是inline
由于虚函数的调用需要在运行时确定具体调用哪个函数版本,而 inline 是编译时的概念,编译器在编译时无法确定虚函数调用的具体对象类型,也就无法进行内联展开。所以,当虚函数被调用时,如果是通过基类指针或引用进行调用,编译器通常会忽略 inline 建议,不进行内联展开。
2.静态成员函数可以实现重载和隐藏吗?
重载和隐藏都没有问题
3.静态成员函数可以是虚函数吗?
不可以 因为静态成员函数传不了this指针 无法实现多态 没有意义 语法会强制检查报错
4.构造函数可以是虚函数吗?
不可以 因为虚表是在编译的时候生成的 虚表指针是在初始化列表初始化的 且先初始化指针再初始化成员
在对象的构造过程中,虚函数表指针还未被正确初始化。构造函数的作用是创建对象并初始化其成员变量,包括设置虚函数表指针。在构造函数执行期间,对象还处于部分构造的状态,虚函数表指针可能还没有被设置为正确的值,此时无法通过虚函数表来调用虚函数。所以,将构造函数声明为虚函数没有意义,因为无法正常使用虚函数的调用机制。
5.C++98的六个默认成员函数 哪些可以是虚函数
析构函数可以是 默认构造函数和拷贝构造都不可以是 理由详见4
取地址运算符 const取地址运算符可以 operator=可以
但是除了析构函数 其他变成虚函数的意义不大
6.对象访问普通成员函数快 还是虚函数快
普通对象一样快 指针/引用对象调用普通函数快 因为这个时候构成多态了 调用虚函数要运行时先通过虚表指针访问虚表得到虚函数地址再调用虚函数
7.虚函数表是在什么时候生成的 存在哪的?
虚函数表编译的时候生成的 存在于常量区
8.指向虚函数表的指针 和虚函数的地址 存在哪的?
虚函数是在编译虚函数这段代码的时候生成的!
虚函数和普通成员函数一样 存放在代码段上
指向虚函数的指针是存在对象里的 虚函数是存在代码段的
9.菱形虚继承的原理
菱形腰线部分类的的公共部分类拿出来单独存放
10.虚表和虚机表的区别
虚表是存虚函数地址的 虚机表是用来存放偏移量的
11.什么是抽象类 抽象类的作用
抽象类是虚函数等于0 实现的 抽象类的作用是 简介强制实现重写
12.什么是重载 覆盖(重写) 重定义(隐藏) 以及其的区别
在同一个作用域内,函数名相同但参数列表不同(参数的类型、个数或顺序不同)的函数可以同时存在,编译器会根据调用时传递的实参类型和数量来选择合适的函数进行调用。
在继承体系中,派生类定义了一个与基类虚函数具有相同函数名、参数列表和返回值类型(协变返回类型除外)的函数,并且使用 override 关键字(可选但推荐)来明确表示这是对基类虚函数的重写。当通过基类指针或引用调用该虚函数时,会根据对象的实际类型调用派生类的重写函数,实现运行时多态。
在继承体系中,当派生类定义了一个与基类函数同名的函数时,无论参数列表是否相同,基类的同名函数都会被派生类的函数隐藏。如果要调用基类的被隐藏函数,需要使用作用域解析运算符 ::。
13.多继承的情况下 派生类独有的虚函数存在继承过来的哪个类里面
存在先继承的那个类里面
&spm=1001.2101.3001.5002&articleId=146217209&d=1&t=3&u=bdb6b6c5b7e342b2b34de4d819ec2bbc)
1609

被折叠的 条评论
为什么被折叠?



