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

博主博客: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. C#并行计算 Parallel.Foreach&Parallel.For

    Parallel.For(int fromInclude, int toExclude, Action<int> body) 栗子: Parallel.For(0, 10, (i) =&g ...

  2. USB的挂起和唤醒(Suspend and Resume)【转】

    转自:http://m.blog.csdn.net/blog/luckywang1103/25244091 USB协议的第9章讲到USB可见设备状态[Universal Serial Bus Spec ...

  3. java中URL 的编码和解码函数

    java中URL 的编码和解码函数java.net.URLEncoder.encode(String s)和java.net.URLDecoder.decode(String s);在javascri ...

  4. NOIp 2018 提高组

    T1铺设道路 传送门 题目描述 春春是一名道路工程师,负责铺设一条长度为 $ n $ 的道路. 铺设道路的主要工作是填平下陷的地表.整段道路可以看作是 $ n $ 块首尾相连的区域,一开始,第 ii ...

  5. 使用JS实现俄罗斯方块游戏

    简单的JS俄罗斯方块游戏源码 效果图: 代码如下,复制即可使用: <!DOCTYPE html> <html> <head> <meta charset=&q ...

  6. java 捕获所有异常

    1.) 通过捕获异常类型的基类Exception就可以处理所有类型的异常.(事实上还有其它的基类,但Exception是同编程活动相关的基类) 2.)因为Exception是与编程有关的所有异常类的基 ...

  7. Java编程的逻辑 (28) - 剖析包装类 (下)

    ​本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...

  8. IntelliJ IDEA快捷键:Esc

    the Esc key in any tool window moves the focus to the editor. 任何工具窗口都会将焦点移动到编辑器.

  9. 字符串匹配的kmp算法 及 python实现

    一:背景 给定一个主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出现的位置,此即串的模式匹配问题. Knuth-Morris-Pratt 算法(简称 KMP)是解决这一问题的常 ...

  10. 000 在什么位置写js代码

    一:介绍 1.DOM 2.节点分类 节点及其类型: 1). 元素节点 2). 属性节点: 元素的属性, 可以直接通过属性的方式来操作. 3). 文本节点: 是元素节点的子节点, 其内容为文本. 二:J ...