精华内容
下载资源
问答
  • 非成员函数(只能重载)、构造函数(虚函数需要使用对象调用)、静态成员函数(属于类)、内联成员函数、友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数。 1. 非成员函数  非成员函数只能被...

    在C++,有五种函数不能被声明成虚函数,分别是:

    非成员函数(只能重载)、构造函数(虚函数需要使用对象调用)、静态成员函数(属于类)、内联成员函数、友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数。

    1. 非成员函数

     非成员函数只能被重载(overload),不能被继承(override),而虚函数主要的作用是在继承中实现动态多态,非成员函数早在编译期间就已经绑定函数了,无法实现动态多态,那声明成虚函数还有什么意义呢?

    2. 构造函数

     要想调用虚函数必须要通过“虚函数表”来进行的,但虚函数表是要在对象实例化之后才能够进行调用。而在构造函数运行期间,还没有为虚函数表分配空间,自然就没法调用虚函数了。

    3. 静态成员函数

     静态成员函数对于每个类来说只有一份,所有的对象都共享这一份代码,它是属于类的而不是属于对象。虚函数必须根据对象类型才能知道调用哪一个虚函数,故虚函数是一定要在对象的基础上才可以的,两者一个是与实例相关,一个是与类相关。

    4. 内联成员函数

     内联函数是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,并且inline函数在编译时被展开,虚函数在运行时才能动态地绑定函数。

    5. 友元函数

     因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。友元函数不属于类的成员函数,不能被继承

    展开全文
  • C++哪些函数不能声明为虚函数

    千次阅读 2019-02-25 11:37:29
    什么样的函数不能声明为虚函数? 不能被继承的函数。 不能被重写的函数。 1)普通函数 普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在...

    什么样的函数不能声明为虚函数?

    1. 不能被继承的函数。
    2. 不能被重写的函数。

    1)普通函数

    普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。

    而多态体现在运行时绑定。通常通过基类指针指向子类对象实现多态。

    2)友元函数

    友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。

    3)构造函数

    首先说下什么是构造函数,构造函数是用来初始化对象的。假如子类可以继承基类构造函数,那么子类对象的构造将使用基类的构造函数,而基类构造函数并不知道子类的有什么成员,显然是不符合语义的。从另外一个角度来讲,多态是通过基类指针指向子类对象来实现多态的,在对象构造之前并没有对象产生,因此无法使用多态特性,这是矛盾的。因此构造函数不允许继承。

    4)内联成员函数

    我们需要知道内联函数就是为了在代码中直接展开,减少函数调用花费的代价。也就是说内联函数是在编译时展开的。而虚函数是为了实现多态,是在运行时绑定的。因此显然内联函数和多态的特性相违背。

    5)静态成员函数

    首先静态成员函数理论是可继承的。但是静态成员函数是编译时确定的,无法动态绑定,不支持多态,因此不能被重写,也就不能被声明为虚函数。
     

    展开全文
  • 在C++,有五种函数不能被声明成虚函数,分别是:非成员函数、构造函数、静态成员函数、内联成员函数、友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数。 1. 非成员函数  非成员函数只能被重载...

    在C++,有五种函数不能被声明成虚函数,分别是:非成员函数、构造函数、静态成员函数、内联成员函数、友元函数这五种,下面分别解释为什么这五种函数不能被声明成虚函数。

    1. 非成员函数

     非成员函数只能被重载(overload),不能被继承(override),而虚函数主要的作用是在继承中实现动态多态,非成员函数早在编译期间就已经绑定函数了,无法实现动态多态,那声明成虚函数还有什么意义呢?

    2. 构造函数

     要想调用虚函数必须要通过“虚函数表”来进行的,但虚函数表是要在对象实例化之后才能够进行调用。而在构造函数运行期间,还没有为虚函数表分配空间,自然就没法调用虚函数了。

    3. 静态成员函数

     静态成员函数对于每个类来说只有一份,所有的对象都共享这一份代码,它是属于类的而不是属于对象。虚函数必须根据对象类型才能知道调用哪一个虚函数,故虚函数是一定要在对象的基础上才可以的,两者一个是与实例相关,一个是与类相关。

    4. 内联成员函数

     内联函数是为了在代码中直接展开,减少函数调用花费的代价,虚函数是为了在继承后对象能够准确的执行自己的动作,并且inline函数在编译时被展开,虚函数在运行时才能动态地绑定函数。

    5. 友元函数

     因为C++不支持友元函数的继承,对于没有继承特性的函数没有虚函数的说法。友元函数不属于类的成员函数,不能被继承。

    =============================================================================================

    Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

    展开全文
  • C++哪些函数不能声明为虚函数   什么样的函数不能声明为虚函数?1)不能被继承的函数。2)不能被重写的函数。 1)普通函数 普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明...

    C++哪些函数不能声明为虚函数

     

    什么样的函数不能声明为虚函数?1)不能被继承的函数。2)不能被重写的函数。

    1)普通函数

    普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。

    而多态体现在运行时绑定。通常通过基类指针指向子类对象实现多态。

    2)友元函数

    友元函数不属于类的成员函数,不能被继承。对于没有继承特性的函数没有虚函数的说法。

    3)构造函数

    首先说下什么是构造函数,构造函数是用来初始化对象的。假如子类可以继承基类构造函数,那么子类对象的构造将使用基类的构造函数,而基类构造函数并不知道子类的有什么成员,显然是不符合语义的。从另外一个角度来讲,多态是通过基类指针指向子类对象来实现多态的,在对象构造之前并没有对象产生,因此无法使用多态特性,这是矛盾的。因此构造函数不允许继承。

    4)内联成员函数

    我们需要知道内联函数就是为了在代码中直接展开,减少函数调用花费的代价。也就是说内联函数是在编译时展开的。而虚函数是为了实现多态,是在运行时绑定的。因此显然内联函数和多态的特性相违背。

    5)静态成员函数

    首先静态成员函数理论是可继承的。但是静态成员函数是编译时确定的,无法动态绑定,不支持多态,因此不能被重写,也就不能被声明为虚函数。

    展开全文
  • 什么样的函数不能声明为虚函数?1)不能被继承的函数。2)不能被重写的函数。 1. 普通函数 普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会...
  • 什么函数不能被声明为虚函数? 1、普通函数(非类成员函数); 2、构造函数; 3、内联函数; 4、静态成员函数; 5、友元函数; 6、不会被继承的基类的析构函数(没有必要)。 1、普通函数(非类成员函数)不能被声明...
  • 哪些函数不能成为虚函数? 普通函数:普通函数不属于成员函数,是不能被继承的。普通函数只能被重载,不能被重写,因此声明为虚函数没有意义。因为编译器会在编译时绑定函数。 构造函数:只有当调用了构造函数,这...
  • 哪些成员函数不能被继承

    千次阅读 2019-03-27 21:15:35
    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 1. 构造函数  构造方法用来初始化类的对象,与父类的其它成员...
  • 大部分的操作符是可以被重载的,...expr2:expr3的重载函数无法保证expr2和expr3中只有一个被执行。 而“sizeof”无法被重载是因为不少内部操作,比如指针加法,都依赖于它,例如: X a[10]; X* p = &a[3]; X* q
  • c++之哪些成员函数不能被继承

    千次阅读 2020-06-14 21:25:50
    C++中,并不是所有的成员函数都能被子类继承,有三类成员函数不能被子类继承,分别是:构造函数(包括拷贝构造)、析构函数、赋值运算符重载函数。 一,构造函数  构造方法用来初始化类的对象,与父类的其它成员...
  • 函数返回值类型:可以相同,也可以不同(注意:函数的返回类型足以区分两个重载函数);◆函数参数类型:必须不同;◆函数参数个数:可以相同,可以不同◆函数参数顺序:可以相同,可以不同;◆注意:参数表的比较过程与参数名...
  • C#中构成函数重载哪些条件和特征? 1.函数名; 2.函数返回值类型; 3.函数参数类型; 4.函数参数个数; 5.函数参数顺序; 以下是我个人总结结果: ◆函数名必须相同方构成函数重载; ◆函数返回值类型:可以相同,...
  • 子类不能继承父类的函数哪些

    千次阅读 2019-05-14 22:01:56
    如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄漏。所以建议的方式是将析构函数声明为虚函数。 也就是delete a的时候,也会执行派生类的析构函数。 一个函数一旦声明为虚函数...
  • C++中不能重载的运算符

    万次阅读 2018-03-18 22:44:45
    如果仅仅有方法返回值类型不同,不能构成函数重载。 上面仅仅说了函数重载,还有一些操作符重载呢? 还是先列出c++有哪些操作符吧! 操作符可分为9个大类,分别为: 1.赋值运算符:‘=’,注意这里不是...
  • 重载函数匹配

    2014-04-09 13:12:18
    这个论点不能匹配任何重载函数。 3)发现了一个模糊匹配。参数匹配的多个重载函数。 当一个重载的调用函数,C + +通过以下过程来确定哪些版本的功能将被称为: 1)首先,C++试图找到完全匹配。这是实际...
  • 一、 C++成员函数重载 C++中的成员函数有四种,分别是普通成员...其中(1)(2)是重复定义,故编译不能通过,而(3)与(1)(2)是不同类型的函数,是重载。 成员函数重载的特征是: (1)具有相同的作用域(即同一个类...
  • 关于C++成员函数和运算符的重载

    千次阅读 2016-11-10 19:36:46
    1.为啥要重载操作符: 通过重载操作符,程序员可以针对“类”类型的操作数定义不同的操作符版本。良好的操作符定义可以使class类型的使用想...2.哪些不能重载 :: .* . ?: 这些不能重载 3.需要注意的地方:
  • C#中的函数重载

    2008-09-09 11:52:00
    C#中构成函数重载哪些条件和特征?1.函数名;2.函数返回值类型;3.函数参数类型;4.函数参数个数;5.函数参数顺序;以下是我个人总结结果:相同的函数名,不同的签名。签名包括参数的类型、个数、顺序,但包括返回值...
  • C#基本语法之C#函数重载

    千次阅读 2007-01-30 13:13:00
    C#中构成函数重载哪些条件和特征?1.函数名;2.函数返回值类型;3.函数参数类型;4.函数参数个数;5.函数参数顺序;以下是我个人总结结果:◆函数名必须相同方构成函数重载;◆函数返回值类型:可以相同,也可以不同(注意:...
  • 一、 C++成员函数重载 C++中的成员函数有四种,分别是普通成员函数,virtual虚函数,const成员函数。 (1) void func(int a); (2) virtual void func(int a);...其中(1)(2)是重复定义,故编译不能通...
  • 如果仅仅有方法返回值类型不同,不能构成函数重载。 上面仅仅说了函数重载,还有一些操作符重载呢? 还是先列出c++有哪些操作符吧! 操作符可分为9个大类,分别为: 1.赋值运算符:‘=’,注意这里不
  • 我又有一个大胆的想法。想法源于一次我要从字节数组里解析复杂数据:有没有这样一个表达式,...提取的数值类型可能有所不同,所以数组、列表之类的容器就不能用了。元组可以,但是元组不方便重新组合,因为指令要把...
  • C++重载

    2019-05-18 17:50:44
    1、标准C++中,运算符重载的功能。 在C++中,运算符重载使得运算符对于规定之外的数据类型可以使用 ...3、哪些运算符不能重载? 1  .(点运算符)通常用于去对象的成员,但是->(箭头运算符),是可以重载...
  • 函数

    2018-08-02 19:57:13
    (一)虚函数用于基类和派生类,普通函数不能 原因:虚函数存在的意义就是为了实现动态的多态。 多态:多态可简单概括为“一个接口,多种方法”多态性又分为静态多态性和动态多态性。 静多态:函数重载,...
  • C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体...析构函数只有一个,不能重载,不带参数 而默认构造函数没有参数,它什么也不做
  • 运算符重载

    2018-03-29 18:39:59
    1.重载之后运算符不能改变运算符有先性和结合性。2.重载之后运算符不能改变运算符操作数的个数及语法结构。3.重载之后运算符操作数至少有一个是自定义类型的。4.重载运算符不能有默认的参数。 怎样进行运算符重载?...

空空如也

空空如也

1 2 3 4 5 ... 8
收藏数 146
精华内容 58
关键字:

哪些函数不能重载