不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板
作者:webabcd
介绍
不可或缺 Windows Native 之 C++
- 函数重载
- 缺省参数
- 内联函数
- 函数模板
示例
1、函数重载, 缺省参数
CppFunction1.h
#pragma once #include <string> using namespace std; namespace NativeDll
{
class CppFunction1
{
public:
string Demo();
};
}
CppFunction1.cpp
/*
* 函数重载,缺省参数
*/ #include "pch.h"
#include "CppFunction1.h"
#include "cppHelper.h" using namespace NativeDll; string CppFunction1::Demo()
{
// 函数重载(overload) - 根据参数类型和个数做函数重载(不能仅按返回值类型来做函数重载)
string function1_get();
string function1_get(string s1);
string function1_get(int i1);
string result1 = function1_get(); // function1_get
string result2 = function1_get("abc"); // function1_get abc
string result3 = function1_get(); // function1_get 100 // 缺省参数 - 函数参数允许有缺省值,为某个参数提供缺省值后,则必须为其后面的参数提供缺省值
int function1_sum(int x, int y = , int z = );
int a = function1_sum(); //
int b = function1_sum(, ); //
int c = function1_sum(, , ); // return "看代码及注释吧";
} // 如果函数参数有缺省值,且有函数声明的话,则缺省值应该在函数声明处指定(此时在函数定义处指定函数缺省值是无效的)
int function1_sum(int x, int y, int z)
{
return x + y + z;
} // 以下几个函数用于演示函数重载
string function1_get()
{
return "function1_get";
}
/*
不能仅按返回值类型来做函数重载(有这句的话会编译错误)
int function1_get()
{
return 100;
}
*/
string function1_get(string s1)
{
return "function1_get " + s1;
}
string function1_get(int i1)
{
return "function1_get " + int2string(i1);
}
2、内联函数, 函数模板
CppFunction2.h
#pragma once #include <string> using namespace std; namespace NativeDll
{
class CppFunction2
{
public:
string Demo();
};
}
CppFunction2.cpp
/*
* 内联函数,函数模板
*/ #include "pch.h"
#include "CppFunction2.h" using namespace NativeDll; void function2_demo1();
void function2_demo2(); string CppFunction2::Demo()
{
// 内联(inline)函数
function2_demo1(); // 函数模板(function template)
function2_demo2(); return "看代码及注释吧";
} // 声明一个 inline 函数(左侧加 inline)
inline int function2_max(int i, int j); // 内联(inline)函数的使用
void function2_demo1()
{
int a = , b = ;
int x; // 内联函数(内置函数,内嵌函数,inline) - 在编译时将所调用函数的代码直接嵌入到主调函数中
x = function2_max(a, b); // /*
inline 函数会在编译时直接替换(类似宏替换),上面调用了 inline 函数,在编译时会被替换为如下代码
if (a > b)
x = a;
x = b;
*/
} // 定义一个 inline 函数(左侧加 inline)
// 注意:从 inline 的原理看,其是以代码膨胀(复制)为代价,省去了函数调用的开销,从而提高函数的执行效率
// 1、当函数包含复杂的控制语句,如循环语句或 switch 语句或递归之类的时,不宜用 inline 函数
// 2、一般只将规模很小(5 句以下)且使用频繁的函数声明为 inline
// 3、总之,如果不值当的(执行效率提高小,代码膨胀大),建议不用 inline
inline int function2_max(int i, int j)
{
if (i > j)
return i;
return j;
} // 声明一个函数模板,其有两个不定类型,分别为 T1 和 T2(typename 和 class 没有区别)
template<typename T1, class T2> // 使用上面的函数模板中定义的类型,定义一个函数
T1 function2_template(T1 a, T2 b, int c) // 使用了函数模板的函数就是模板函数
{
if (a > b)
return a;
return a + ;
} /*
这种写法是错误的,因为推导不出返回值的类型
T2 function2_template(T1 a, T1 b)
{
if (a > b)
return 100
return 1000;
}
*/ void function2_demo2()
{
float result;
float i = 1.1f;
int j = ; // 调用指定的函数,此函数有不定类型的参数
result = function2_template(i, j, ); // 101.1
}
OK
[源码下载]
不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板的更多相关文章
- 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换
[源码下载] 不可或缺 Windows Native (24) - C++: 运算符重载, 自定义类型转换 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 运算符重载 自 ...
- 不可或缺 Windows Native 系列文章索引
[源码下载] 不可或缺 Windows Native 系列文章索引 作者:webabcd 1.不可或缺 Windows Native (1) - C 语言: hello c 介绍不可或缺 Window ...
- 不可或缺 Windows Native (23) - C++: 虚函数
[源码下载] 不可或缺 Windows Native (23) - C++: 虚函数 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 虚函数 示例1.基类CppHuman ...
- 不可或缺 Windows Native (20) - C++: 友元函数, 友元类
[源码下载] 不可或缺 Windows Native (20) - C++: 友元函数, 友元类 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 友元函数 友元类 示例演 ...
- 不可或缺 Windows Native (6) - C 语言: 函数
[源码下载] 不可或缺 Windows Native (6) - C 语言: 函数 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 函数 示例cFunction.h # ...
- 不可或缺 Windows Native (13) - C++: 标准输入, 标准输出, 字符串内存流
[源码下载] 不可或缺 Windows Native (13) - C++: 标准输入, 标准输出, 字符串内存流 作者:webabcd 介绍不可或缺 Windows Native 之 C++ 标准输 ...
- 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native
[源码下载] 不可或缺 Windows Native (25) - C++: windows app native, android app native, ios app native 作者:web ...
- 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)
[源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
[源码下载] 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板 作者:webabcd 介绍不可或缺 Window ...
随机推荐
- as3commons-bytecode 获取所有类的一个BUG
下载了这个swc,号称可以反射出所有加载的类.已经用在了spring. 可是一运行就报错,说bytearray.uncompress出错.操. 下载整个源码,单独加载as3commons-byteco ...
- Git Day01,仓库,commit,版本切换
1st,创建版本库: 2nd,添加文件: 3rd,修改文件,并提交: 4th,版本切换:git log查看版本:版本回退: 又回到原始版本了: 回到“未来”: 今天就到这里,明天继续.Git确实挺 ...
- Java用来进行批量文件重命名,批量提取特定类型文件
原因: 因为在网上下载视频教程,有的名字特别长,一般都是机构或者网站的宣传,不方便直接看到视频的简介,所以做了下面的第一个功能. 因为老师发的课件中,文件夹太多,想把docx都放在同一个文件夹下面,一 ...
- 将不确定变成确定~Uri文本文件不用浏览器自动打开,而是下载到本地
回到目录 这个标题有点长,简单来说就是,对于一个文件下载来说,是否可以提示用户,让它去保存,而不是将它在浏览器中打开,在浏览器中打开有个致命问题,那就是,如果你的页面编码和文件的编码不一致时,打开的就 ...
- 基础才是重中之重~C#中标准的IDispose模式
回到目录 IDispose模式在C++中用的很多,用来清理资源,而在C#里,资源分为托管和非托管两种,托管资源是由C#的CLR帮助我们清理的,它是通过调用对象的析构函数完成的对象释放工作,而对于非托管 ...
- 搭建jekyll博客
使用jekyll将markdown文件生成静态的html文件,并使用主题有序的进行布局,形成最终的博客页面. 特点 基于ruby 使用Markdown书写文章 无需数据库 可以使用GitHub Pag ...
- WindowManager 实现悬浮窗 详解
WindowManager 实现悬浮窗 详解 一:对于想直接看效果的,可以看看我的demo app. 链接:http://sj.qq.com/myapp/detail.htm?apkName=com. ...
- [Spring框架] Spring中的 ContextLoaderListener 实现原理.
前言: 这是关于Spring的第三篇文章, 打算后续还会写入AOP 和Spring 事务管理相关的文章, 这么好的两个周末 都在看code了, 确实是有所收获, 现在就来记录一下. 在上一篇讲解Spr ...
- 每天一个linux命令(22):find 命令的参数详解
find一些常用参数的一些常用实例和一些具体用法和注意事项. 1.使用name选项: 文件名选项是find命令最常用的选项,要么单独使用该选项,要么和其他选项一起使用. 可以使用某种文件名模式来匹配 ...
- 高并发、海量数据处理尽量少使用using也能提升效率
请看下面两段: 第一种方式: MemoryStream stream = new MemoryStream(); string text = "aasasdfasdfad;sas;fkqew ...