在一个类中定义了两个函数名相同的函数,其中一个是常成员函数,能帮我解释一下吗

qinqinluoluo 2009-03-18 07:13:51
#include<iostream>
using namespace std;
class MyClass{
public:
MyClass(int x):val(x){}
void Print()const{cout<<"const:val="<<val<<endl;}
void Print(){cout<<"val="<<val<<endl;}
private:
int val;
};
int main(){
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print();
obj2.Print();
return 0;
}

程序输出结果:const:val=10
val=20

在一个类中定义了两个函数名相同的函数,其中一个是常成员函数,这是函数的重载吗?
obj1是常对象只能调用常成员函数,obj1应该可以应该对两个Print函数都能调用啊,为什会调用第二个
...全文
791 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhousap 2009-03-26
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class MyClass
{
public:
MyClass(int x):val(x){}

void Print()const
{
cout < < "const:val=" < < val < < endl;
}
/*
void Print()
{
cout < < "val=" < < val < < endl;
}
*/
private:
int val;
};
int main()
{

zhousap 2009-03-26
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class MyClass
{
public:
MyClass(int x):val(x){}

void Print()const
{
cout < < "const:val=" < < val < < endl;
}
/*
void Print()
{
cout < < "val=" < < val < < endl;
}
*/
private:
int val;
};
int main()
{

iambic 2009-03-18
  • 打赏
  • 举报
回复
基础的C++书一般都会讲这个。建议重新找本书来读读。
Sco_field 2009-03-18
  • 打赏
  • 举报
回复
握个手~

[Quote=引用 6 楼 yangch_nhcmo 的回复:]
C/C++ code
#include <iostream>
using namespace std;

class MyClass
{
public:
MyClass(int x):val(x){}

void Print()const
{
cout << "const:val=" << val << endl;
}
/*
void Print()
{
cout << "val=" << val << endl;
}
*/
private:
int val;
};
int main()
{
const MyClass obj1(10);
MyClass obj2(20);
obj1.…
[/Quote]
Sco_field 2009-03-18
  • 打赏
  • 举报
回复
嗯,const不能转为非const,会导致编译错误,因为非const可能会被改变;
而反过来是可以的。
yangch_nhcmo 2009-03-18
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class MyClass
{
public:
MyClass(int x):val(x){}

void Print()const
{
cout << "const:val=" << val << endl;
}
/*
void Print()
{
cout << "val=" << val << endl;
}
*/
private:
int val;
};
int main()
{
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print();
obj2.Print();//编译器会去找最为匹配的函数原型; 上面将void Print()注释掉,系统将会调用void Print()const
return 0;
}

output:
const:val=10
const:val=20

fairchild811 2009-03-18
  • 打赏
  • 举报
回复
const的对象调用const函数
Sco_field 2009-03-18
  • 打赏
  • 举报
回复

如果这样的话就会调用相同的,但如果 void Print() 不注释则选择完全匹配。
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass(int x):val(x){}
void Print()const
{
cout <<"const:val=" <<val <<endl;
}
// void Print()
// {
// cout <<"val=" <<val <<endl;
// }
private:
int val;
};
int main()
{
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print();
obj2.Print();
return 0;
}

[Quote=引用楼主 qinqinluoluo 的帖子:]
#include <iostream>
using namespace std;
class MyClass{
public:
MyClass(int x):val(x){}
void Print()const{cout < <"const:val=" < <val < <endl;}
void Print(){cout < <"val=" < <val < <endl;}
private:
int val;
};
int main(){
const MyClass obj1(10);
MyClass obj2(20);
obj1.Print();
obj2.Print();
return 0;
}

程序输出结果:const:val=10
val=20

在一个…
[/Quote]
fairchild811 2009-03-18
  • 打赏
  • 举报
回复
函数是const可以重载
scott_2009 2009-03-18
  • 打赏
  • 举报
回复
函数的const属性可以作为重载的条件。
obj1是const obj,只能调用const成员函数。
你可以这么理解声明obj是一个常对象,那么就是不想让他改变对象里面的内容。
如果常对象可以调用非const的成员函数那么就有可能改变这个对象的内容。
这就矛盾了,所以常对象只能调用常类型函数。
Sco_field 2009-03-18
  • 打赏
  • 举报
回复
会调用最佳匹配的函数

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧