该博文仅用于交流学习,请慎用于任何商业用途,本博主保留对该博文的一切权利。
博主博客:http://blog.csdn.net/qq844352155 转载请注明出处: 在一个类内,最常见的就是构造函数的重载了.这里我就不介绍了. 先来看看常见的类内重载.
//method.cpp
#include
#include
using namespace std;
class base{
private:
int i;
string s;
public:
base(int ii,string ss):i(ii),s(ss){
}
virtual ~base(){
}
void add(int ii){
cout<<i<<”+”<<ii<<”=”<<i+ii<<endl;
}
void add(string ss){
cout<<s<<”+”<<ss<<”=”<<s+ss<<endl;
}
};
//main.cpp
#include “method.cpp”
int main(){
base b(10,”me”);
b.add(25);
b.add(“name is jack!”);
return 0;
};
运行结果: 这个跟类外的函数重载几乎没有区别,只是这一次需要对象来调用方法而已. GCC还有个奇怪的行为,
//method.cpp
#include
#include
using namespace std;
class base{
private:
int i;
string s;
public:
base(int ii,string ss):i(ii),s(ss){
}
virtual ~base(){
}
void add(int ii){
cout<<i<<”+”<<ii<<”=”<<i+ii<<endl;
}
void add(string ss){
cout<<s<<”+”<<ss<<”=”<<s+ss<<endl;
}
void add(string &ss){
cout<<” This is a &string”<<s<<” “<<ss<<endl;
}
};
这个在编译的时候不会报错:但是在编译关联文件的时候却会导致歧义.
//main.cpp
#include “method.cpp”
int main(){
base b(10,”me”);
b.add(25);
b.add(“name is jack!”);
string s=”wife is LJ”;
b.add(s);
return 0;
};
可能这个是为了留给用户更多选择的余地吧. 同时要记住是可以通过const重载的,即参数是const和非const也算是不同的参数. 在C++11里面,可以显式删除某个重载方法.例如:
//method.cpp
#include
#include
using namespace std;
class base{
private:
int i;
string s;
protected:
int getI()const{return i;};
string getS()const{return s;};
public:
base(int ii,string ss):i(ii),s(ss){
}
virtual ~base(){
}
void add(int ii){
cout<<i<<”+”<<ii<<”=”<<i+ii<<endl;
}
void add(string ss){
cout<<s<<”+”<<ss<<”=”<<s+ss<<endl;
}
//void add(char c)=delete
};
//main.cpp
#include “method.cpp”
int main(){
base d(15,”you”);
d.add(5);
d.add(“are fine!”);
char ch=’a’;
d.add(ch);
return 0;
};
没有显式地删除add(char c)之前,运行结果为: 可以看到char被转换为了int类型,这或许不是我们想要的. 因此我们可以手动删除这个重载方法.
#include
#include
using namespace std;
class base{
private:
int i;
string s;
protected:
int getI()const{return i;};
string getS()const{return s;};
public:
base(int ii,string ss):i(ii),s(ss){
}
virtual ~base(){
}
void add(int ii){
cout<<i<<”+”<<ii<<”=”<<i+ii<<endl;
}
void add(string ss){
cout<<s<<”+”<<ss<<”=”<<s+ss<<endl;
}
void add(char c)=delete
};
这样,编译的时候就会报错了.类外的函数重载同样支持delete操作,这里就不演示了. 这个就是类里面的函数重载了. 需要注意的是继承的时候继承类中的重载有比较大的区别.请看下一篇博文.
—————————————————————————————————————————————————— //写的错误或者不好的地方请多多指导,可以在下面留言或者给我发邮件,指出我的错误以及不足,以便我修改,更好的分享给大家,谢谢。 转载请注明出处:https://www.royalchen.com/ author:royalchen Email:royalchen@royalchen.com ———————————————————————————————————————————————————
- 本文作者: royalchen
- 本文链接: http://www.royalchen.com/2016/02/24/c学习笔记23类内函数重载/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!