【C++】 --- 如果同时定义了两个函数,一个带const,一个不带,会有问题吗?

简介: 【C++】 --- 如果同时定义了两个函数,一个带const,一个不带,会有问题吗?

如果函数名相同,在相同的作用域内,其参数类型、参数个数,参数顺序不同等能构成函数重载。

有趣的是如果同时在类中,对于函数名相同参数列表也相同的成员函数的const函数和非const函数能够构成重载。

它们被调用的时机为:如果定义的对象是常对象,则调用的是const成员函数,如果定义的对象是非常对象,则调用重载的非const成员函数。

#include <iostream>
int override_test(int a, int b)
{
        return a + b;
}
int override_test(int a, float b)
{
        return a + b;
}
/*
int override_test(int a, float b) const
{
        return a + b;
}
*/
class OverrideTest
{
public:
        int Function(int a, int b);
        int Function(int a, float b);
        int Function(int a, float b) const;
private:
        int a;
        int b;
};
int main(void)
{
        return 0;
}
目录
相关文章
|
12小时前
|
存储 编译器 文件存储
|
4天前
|
编译器 C++
【C++】类和对象④(类的默认成员函数:取地址及const取地址重载 )
本文探讨了C++中类的成员函数,特别是取地址及const取地址操作符重载,通常无需重载,但展示了如何自定义以适应特定需求。接着讨论了构造函数的重要性,尤其是使用初始化列表来高效地初始化类的成员,包括对象成员、引用和const成员。初始化列表确保在对象创建时正确赋值,并遵循特定的执行顺序。
|
4天前
|
编译器 C++
【C++】类和对象③(类的默认成员函数:赋值运算符重载)
在C++中,运算符重载允许为用户定义的类型扩展运算符功能,但不能创建新运算符如`operator@`。重载的运算符必须至少有一个类类型参数,且不能改变内置类型运算符的含义。`.*::sizeof?`不可重载。赋值运算符`=`通常作为成员函数重载,确保封装性,如`Date`类的`operator==`。赋值运算符应返回引用并检查自我赋值。当未显式重载时,编译器提供默认实现,但这可能不足以处理资源管理。拷贝构造和赋值运算符在对象复制中有不同用途,需根据类需求定制实现。正确实现它们对避免数据错误和内存问题至关重要。接下来将探讨更多操作符重载和默认成员函数。
|
4天前
|
程序员 编译器 C++
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
探索C++语言宝库:解锁基础知识与实用技能(类型变量+条件循环+函数模块+OOP+异常处理)
8 0
|
6天前
|
缓存 C++
详细解读C++常用库函数C函数库cstdio
详细解读C++常用库函数C函数库cstdio
|
6天前
详细解读C++char类型函数
详细解读C++char类型函数
12 0
|
6天前
|
C++
C++函数对象(仿函数)
C++函数对象(仿函数)
7 0
|
6天前
|
C++
C++函数的默认参数、占位符、重载
C++函数的默认参数、占位符、重载
14 0
|
1天前
|
编译器 C语言 C++
|
1天前
|
编译器 C++
【C++】详解初始化列表,隐式类型转化,类静态成员,友元
【C++】详解初始化列表,隐式类型转化,类静态成员,友元