说一说C++ 中哪些函数不能是虚函数?
普通函数(非成员函数)、构造函数、析构函数、友元函数、静态成员函数、内联成员函数
标准回答
C++ 中,普通函数(非成员函数)、构造函数、友元函数、静态成员函数、内联成员函数这些不能是虚函数。
普通函数(非成员函数)
普通函数(非成员函数)只能被重载,不能被重写,所以声明为虚函数也没有意义,编译器编译时就会绑定函数地址。
构造函数
创建派生类对象时,会调用派生类的构造函数,派生类的构造函数中将会调用基类的一个构造函数,这种顺序不同于继承机制。因此派生类不继承基类的构造函数,所以将构造函数声明为虚函数没有意义。
友元函数
友元函数不是类成员,而只有成员函数才能是虚函数。
静态成员函数
静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,没有动态绑定的必要性。静态成员函数属于一个类而非某一对象,没有 this 指针,它无法进行对象的判别。
内联成员函数
内联函数在编译时被展开,虚函数在运行时才能动态的绑定函数。
普通函数(非类成员函数)、构造函数、内联函数、友元函数、静态成员函数
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
得分点
普通函数(非成员函数)、构造函数、析构函数、友元函数、静态成员函数、内联成员函数
参考答案
标准回答
C++ 中,普通函数(非成员函数)、构造函数、友元函数、静态成员函数、内联成员函数这些不能是虚函数。
普通函数(非成员函数)
普通函数(非成员函数)只能被重载,不能被重写,所以声明为虚函数也没有意义,编译器编译时就会绑定函数地址。
构造函数
创建派生类对象时,会调用派生类的构造函数,派生类的构造函数中将会调用基类的一个构造函数,这种顺序不同于继承机制。因此派生类不继承基类的构造函数,所以将构造函数声明为虚函数没有意义。
友元函数
友元函数不是类成员,而只有成员函数才能是虚函数。
静态成员函数
静态成员函数对于每个类来说只有一份代码,所有的对象都共享这一份代码,没有动态绑定的必要性。静态成员函数属于一个类而非某一对象,没有 this 指针,它无法进行对象的判别。
内联成员函数
内联函数在编译时被展开,虚函数在运行时才能动态的绑定函数。