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

博主博客: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. 【Hadoop】搭建完全分布式的hadoop【转】

    转自:http://www.cnblogs.com/laov/p/3421479.html 下面博文已更新,请移步 ↑ 用于测试,我用4台虚拟机搭建成了hadoop结构 我用了两个台式机.一个xp系统 ...

  2. python数据库操作 - MySQL入门【转】

    python数据库操作 - MySQL入门 python学院 2017-02-05 16:22 PyMySQL是Python中操作MySQL的模块,和之前使用的MySQLdb模块基本功能一致,PyMy ...

  3. jquery.validate动态更改校验规则

    有时候表单中有多个字段是相互关联的,以下遇到的就是证件类型和证件号码的关联,在下拉框中选择不同的证件类型,证件号码的值的格式都是不同的,这就需要动态的改变校验规则. 点击(此处)折叠或打开 <! ...

  4. WCF服务安全控制之netTcpBinding的用户名密码验证【转】

    选择netTcpBinding WCF的绑定方式比较多,常用的大体有四种: wsHttpBinding basicHttpBinding netTcpBinding wsDualHttpBinding ...

  5. 当父级绑定了DataContext之内的数据源时,子级想重新绑回DataContext

    <Grid x:Name="NewDeploymentObjectPanel" Background="White" DataContext=" ...

  6. protected

    protected  继承访问权限 在同一包中可以访问protected成员. 继承状态可以访问protected成员 在不同包中非继承不可以访问protected成员.

  7. javaWeb服务器配置

    jdk下载地址:http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-52126 ...

  8. appium入门级教程(1)—— appium介绍

    appium介绍 官方网站与介绍 1.特点 appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web应用和混合应用. “移动原生应用”是指那些用iOS或者 ...

  9. Nginx+redis的Asp.net

    基于Nginx+redis的Asp.net站点搭建   剧情介绍 在传统的信息系统(比如小规模的ERP\MES系统),往往只是进行简单的应用服务器和数据库服务器的分布式部署,以此来提高应用系统的负载能 ...

  10. Xcode6.1 模拟器路径

    Xcode 5的iOS模拟器的应用的目录是在~/Library/Application Support/iPhone Simulator/<iOS_Version>/Application ...