C++类成员函数的重写和重载有啥区别
时间: 2023-09-09 11:08:16 浏览: 59
C++中的函数重载和函数重写是两个不同的概念。
函数重载是指在同一个作用域内,可以定义多个同名函数,但是它们的参数类型或个数不同。编译器会根据调用时传入的参数类型和个数来确定要调用哪个函数。函数重载可以提高代码的可读性和灵活性。
函数重写是指在派生类中重新定义基类中已有的虚函数,使得派生类对象通过该虚函数调用时,执行的是派生类中的函数实现。通过重写虚函数,可以实现多态性。重写虚函数的函数签名必须与基类中的虚函数完全相同。
需要注意的是,函数重写只能发生在继承类中,而函数重载则可以在任何作用域中进行。此外,函数重载和函数重写的解析规则也是不同的。函数重载是静态绑定,而函数重写是动态绑定。
相关问题
c++ 中为类重载运算符时成员函数和全局函数的区别
在C++中,重载运算符可以作为成员函数或全局函数来定义。下面是成员函数和全局函数在类重载运算符时的区别。
1. 形式:
成员函数:重载运算符作为类的成员函数被定义,使用类的实例调用。
全局函数:重载运算符作为类外的全局函数被定义,使用运算符符号作为函数名进行调用。
2. 参数:
成员函数:作为成员函数时,重载运算符有一个参数(除了一元运算符,如++, --等)表示运算符的右操作数。左操作数是调用该成员函数的类的实例。
全局函数:作为全局函数时,重载运算符通常有两个参数,分别表示运算符的两个操作数。
3. 实现位置:
成员函数:重载运算符作为类的成员函数实现,因此可以使用类的私有成员变量和保护成员函数。
全局函数:重载运算符作为全局函数时,不能直接访问类的私有成员变量和保护成员函数,需要通过类的公有接口来实现对类的访问。
4. 对称性:
成员函数:由于成员函数将调用者作为左操作数,因此成员函数的操作数的顺序是固定的。例如,对于一个重载的加法运算符,如果a是类的实例,则a.operator+(b)或a+b是可以的,但b.operator+(a)是不行的。
全局函数:全局函数没有这种对称性的问题,因为它不依赖于特定的对象来调用。
综上所述,成员函数和全局函数在类重载运算符时的区别在于形式、参数、实现位置和对称性。选择使用成员函数还是全局函数取决于具体的需求和设计选择。
c++重写和完全重新写一个函数有啥区别?
重写和完全重新写一个函数的区别在于是否保留原有的函数定义和功能。
重写一个函数指的是在子类中重新定义父类中已有的函数。子类重写父类函数时,可以保留原有的函数定义和功能,也可以修改或添加新的功能。重写的函数在运行时会根据对象的类型动态调用相应的函数实现。
完全重新写一个函数指的是在重新定义一个全新的函数,与原有函数没有任何关系。这个新函数可能会有与原有函数相同的名称,但是参数列表、返回值、实现方式等都不同。完全重新写一个函数会覆盖原有的函数定义,如果在调用时使用了原有函数的名称,那么会调用新的函数实现。
需要根据具体的编程场景和需求来选择重写还是完全重新写一个函数。重写可以保留原有的代码逻辑,并且可以在原有的基础上进行修改和扩展,而完全重新写一个函数则可以完全自由地实现新的功能,不会对原有的代码产生影响。