成员函数重载运算符和全局函数重载运算符有什么本质区别 
时间: 2023-05-27 19:05:17 浏览: 32
成员函数重载运算符是类中的一个函数,它的参数个数比普通成员函数多一个,且第一个参数是用于调用运算符的对象本身,而全局函数重载运算符则不属于任何类,它的参数个数与运算符的操作数数量相同。
本质区别在于成员函数重载运算符能够直接访问类的私有成员,而全局函数重载运算符则不能直接访问类的私有成员。此外,成员函数重载运算符可以被继承,而全局函数重载运算符不会被继承。
因此,选择使用哪种方式来重载运算符取决于具体的需求。如果需要访问类的私有成员,或者需要继承运算符重载函数,可以选择成员函数重载运算符;否则,可以选择全局函数重载运算符。
相关问题
成员函数重载运算符和友元函数重载运算符区别
成员函数重载运算符和友元函数重载运算符的主要区别在于它们可以访问的数据成员不同。
成员函数重载运算符是类的成员函数,它们可以直接访问类的私有成员和保护成员。因此,当我们需要重载某些需要访问类的私有成员和保护成员的运算符时,我们通常会使用成员函数重载运算符。
而友元函数重载运算符不是类的成员函数,它们不能直接访问类的私有成员和保护成员。它们可以被声明为类的友元函数,从而获得访问类的私有成员和保护成员的权限。因此,当我们需要重载某些不能直接访问类的私有成员和保护成员的运算符时,我们通常会使用友元函数重载运算符。
综上所述,成员函数重载运算符和友元函数重载运算符在访问类的成员方面有所不同,开发者需要根据具体的需求选择适合的方式。
c++ 中为类重载运算符时成员函数和全局函数的区别
在C++中,重载运算符可以作为成员函数或全局函数来定义。下面是成员函数和全局函数在类重载运算符时的区别。
1. 形式:
成员函数:重载运算符作为类的成员函数被定义,使用类的实例调用。
全局函数:重载运算符作为类外的全局函数被定义,使用运算符符号作为函数名进行调用。
2. 参数:
成员函数:作为成员函数时,重载运算符有一个参数(除了一元运算符,如++, --等)表示运算符的右操作数。左操作数是调用该成员函数的类的实例。
全局函数:作为全局函数时,重载运算符通常有两个参数,分别表示运算符的两个操作数。
3. 实现位置:
成员函数:重载运算符作为类的成员函数实现,因此可以使用类的私有成员变量和保护成员函数。
全局函数:重载运算符作为全局函数时,不能直接访问类的私有成员变量和保护成员函数,需要通过类的公有接口来实现对类的访问。
4. 对称性:
成员函数:由于成员函数将调用者作为左操作数,因此成员函数的操作数的顺序是固定的。例如,对于一个重载的加法运算符,如果a是类的实例,则a.operator+(b)或a+b是可以的,但b.operator+(a)是不行的。
全局函数:全局函数没有这种对称性的问题,因为它不依赖于特定的对象来调用。
综上所述,成员函数和全局函数在类重载运算符时的区别在于形式、参数、实现位置和对称性。选择使用成员函数还是全局函数取决于具体的需求和设计选择。
相关推荐
















