C++学习笔记23,类内函数重载
该博文仅用于交流学习。请慎用于不论什么商业用途,本博主保留对该博文的一切权利。
博主博客: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,类内函数重载的更多相关文章
- python学习笔记4_类和更抽象
python学习笔记4_类和更抽象 一.对象 class 对象主要有三个特性,继承.封装.多态.python的核心. 1.多态.封装.继承 多态,就算不知道变量所引用的类型,还是可以操作对象,根据类型 ...
- Ext.Net学习笔记23:Ext.Net TabPanel用法详解
Ext.Net学习笔记23:Ext.Net TabPanel用法详解 上面的图片中给出了TabPanel的一个效果图,我们来看一下代码: <ext:TabPanel runat="se ...
- Java学习笔记——File类之文件管理和读写操作、下载图片
Java学习笔记——File类之文件管理和读写操作.下载图片 File类的总结: 1.文件和文件夹的创建 2.文件的读取 3.文件的写入 4.文件的复制(字符流.字节流.处理流) 5.以图片地址下载图 ...
- Java学习笔记之---类和对象
Java学习笔记之---类和对象 (一)类 类是一个模板,它描述一类对象的行为和状态 例如:动物类是一个类,动物们都有属性:颜色,动物们都有行为:吃饭 public class Dog { Stri ...
- UML学习笔记:类图
UML学习笔记:类图 有些问题,不去解决,就永远都是问题! 类图 类图(Class Diagrame)是描述类.接口以及它们之间关系的图,用来显示系统中各个类的静态结构. 类图包含2种元素:类.接口, ...
- C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖
学习C++必定会遇到重载.重写.重定义.概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了. 概念,特点: 重载: 直白点说就是函数名字相同,传参的个数,类型不一样.判断标准在于 ...
- 初探C++运算符重载学习笔记<2> 重载为友元函数
初探C++运算符重载学习笔记 在上面那篇博客中,写了将运算符重载为普通函数或类的成员函数这两种情况. 以下的两种情况发生.则我们须要将运算符重载为类的友元函数 <1>成员函数不能满足要求 ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- [原创]java WEB学习笔记23:MVC案例完整实践(part 4)---模糊查询的设计与实现
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- nginx_upstream_check_module监控后端服务器http
nginx_upstream_check_module 是专门提供负载均衡器内节点的健康检查的外部模块,由淘宝的姚伟斌大神开发,通过它可以用来检测后端 realserver 的健康状态.如果后端 re ...
- 解决urbuntu桌面本客户端输入ll command not found
用桌面版的urbuntu系统,打开客户端输入ll,报错如下 于是度娘,解决方案:可以作如下修改:打开 ~/.bashrc 找到 #alias ll=’ls -l’,去掉前面的#就可以了.(关闭原来的终 ...
- day22-23作业
1.字节流 字符流 2.read() 3.-1 4.System.out 5.InputStream 6.OutputStream 1.IO流按流向分为输入流和输出流,即输入流和输出流 ...
- yolov2在CUDA8.0+cudnn8.0下安装、训练、检测经历
这次用yolov2做检测时遇到个大坑,折腾了我好几天,特以此文记录之. 一.安装cuda+cudnn 它们的版本必须要匹配,否则训练后检测不出目标! 1.下载cuda8.0.61_375.26_lin ...
- Linux挂载qcow2格式的镜像
qcow2格式的镜像一般用于KVM/QEMU的hypervisor,当我们需要修改guest host内的一些配置而又不想启动VM时则可以通过挂载guest host进行修改. 需要安装的工具包: l ...
- 【Git使用详解】Egit的常用操作详解
常用操作 操作 说明 Fetch 从远程获取最新版本到本地,不会自动merge Merge 可以把一个分支标签或某个commit的修改合并现在的分支上 Pull 从远程获取最新版本并merge到本地相 ...
- 【论文阅读】ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
ShuffleNet: An Extremely Efficient Convolutional Neural Network for MobileDevices
- eaccelerator 完全手册:配置、控制、API接口
安装官方有很详细的文档 转自 http://www.enjoyphp.com/2010/eaccelerator-manual/ 配置选项 eaccelerator.shm_size指定 eAccel ...
- TypeScript的HTML5游戏
wildfirecode 自动化的基于TypeScript的HTML5游戏开发 自动化的开发流程 在HTML5游戏开发或者说在Web客户端开发中,对项目代码进行修改之后,一般来说,需要手动刷新浏览器来 ...
- 【AtCoder】AGC028 (A-E)题解
A - Two Abbreviations 如果有最小答案的话这个答案一定是N和M的lcm 我们考虑一下什么情况下 \(k \frac{L}{N} = h \frac{L}{M}\)且\(k,g\)互 ...