该博文仅用于交流学习。请慎用于不论什么商业用途,本博主保留对该博文的一切权利。

博主博客:http://blog.csdn.net/qq844352155

转载请注明出处:

在一个类内,最常见的就是构造函数的重载了.这里我就不介绍了.

先来看看常见的类内重载.

//method.cpp
#include <iostream>
#include <string>
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 <iostream>
#include <string>
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;
} };

这个在编译的时候不会报错:可是在编译关联文件的时候却会导致歧义.

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXE4NDQzNTIxNTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

//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 <iostream>
#include <string>
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 <iostream>
#include <string>
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操作,这里就不演示了.

这个就是类里面的函数重载了.

须要注意的是继承的时候继承类中的重载有比較大的差别.请看下一篇博文.

C++学习笔记23,类内函数重载的更多相关文章

  1. python学习笔记4_类和更抽象

    python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...

  2. Ext.Net学习笔记23:Ext.Net TabPanel用法详解

    Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...

  3. Java学习笔记——File类之文件管理和读写操作、下载图片

    Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...

  4. Java学习笔记之---类和对象

    Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态  例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...

  5. UML学习笔记:类图

    UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...

  6. C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖

    学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...

  7. 初探C++运算符重载学习笔记&lt;2&gt; 重载为友元函数

    初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 ...

  8. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  9. [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. Redis持久化——AOF

    一.是什么? AOF是以日志的形式来记录每个写操作,将Redis执行过的所有写操作记录下来(读操作不做记录),只许追加文件不可以改写文件,Redis启动之初会读取该文件重新构建数据,换言之,Redis ...

  2. mysql学习------二进制日志

    一.什么是二进制日志 1.记录对数据发生或潜在发生更改的sql语句 2.二进制格式保存 3.用途广泛,包括 a.查看数据库变更历史 b.数据库增量备份 c.数据库灾难恢复 d.mysql replic ...

  3. [uart]1.Linux中tty框架与uart框架之间的调用关系剖析

    转自:http://developer.51cto.com/art/201209/357501_all.htm 目录 1.tty框架 2.uart框架 3.自底向上 4.自顶向下 5.关系图 在这期间 ...

  4. ApiCloud开发经验总结

    1. 引擎或模块问题:遇到应用层无法解决的问题,如果能确定需要引擎和模块支持的,不要自己想办法绕过去,要第一时间在开发者社区提交问题,或找APICloud项目经理提出. !!!注意!!!: 在开发者社 ...

  5. springcloud服务安全连接

    Spring Cloud可以增加HTTP Basic认证来增加服务连接的安全性. 1.加入security启动器 在maven配置文件中加入Spring Boot的security启动器. <d ...

  6. ubuntu 12.04网络配置之设置静态iP

    step: 1.输入命令: sudo vi /etc/network/interfaces 看到如下内容: 2.追加以下内容: iface eth0 inet static address 192.1 ...

  7. idea中搜狗输入法不跟随光标,看不到输入的字

    好久没在windows上开发了,今天遇到一个比较坑的问题: 最新版idea,输入法都是最新的;但是idea里面输入字,看不到自己输入的是什么字,好坑... 在外面可以看到输入什么字说明与输入法无关, ...

  8. Linux挂载qcow2格式的镜像

    qcow2格式的镜像一般用于KVM/QEMU的hypervisor,当我们需要修改guest host内的一些配置而又不想启动VM时则可以通过挂载guest host进行修改. 需要安装的工具包: l ...

  9. 【hadoop】har://

    来源:http://hadoop.apache.org/docs/r1.0.4/cn/hadoop_archives.html 在hadoop代码中发现了一个很奇怪的路径,由har://开头.经查询, ...

  10. SOA 设计的 9 大原则

    面向服务的架构 (SOA) 设计要尽可能地简单.在设计一个 SOA 服务的时候要谨记这 9 大设计原则: 1. 标准服务契约 服务要遵循一个服务描述. 2. 松耦合 服务之间的依赖最小化. 3. 服务 ...