`
Etwo
  • 浏览: 103231 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

2014之C++学习笔记(四)关于C++函数的传说

    博客分类:
  • C++
阅读更多

一转眼也过去有俩月了,本以为还是坚持不了,博客的力量总是有的,看着自己以前写的博客,现在也需要重新拾起来,当然所谓的公司有新的功能系统需要开发,也肯定早就完成了,为啥时间都过去将近这么久了才重新拾起,原因也是最近etwo显得有些颓废了。虽然博客写的不怎样,但是总会有些收获的,不是吗?坚持学习某样东西都要写好日志记录,加油!要充满正能量!

1、  1、什么是函数

函数由函数名以及一组操作数类型唯一地表示。函数的操作数,也即形参,在一对圆括号中声明,形参与形参之间以逗号分隔。函数执行的运算在一个称为函数体的块语句中定义。每一个函数都有一个相关联的返回类型。

 

2、  2、形参与实参的区别:

形参在函数定义的形参表中进行定义,是一个变量,其作用域为整个函数。而实参出现在函数调用中,是一个表达式。进行函数调用时,用传递给函数的实参对形参进行初始化。

3、  3、一个code

// TestC++0824_001.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//返回x的y次幂
int power(int x, int y) {
	int result = 1;
	for (int i = 1; i <= y; ++i) {
		result *= x;
	}
	return result;
}

int _tmain(int argc, _TCHAR* argv[])
{
	int xval, yval;

	cout << "Enter two integers(the second one should be equal to or bigger than 0)" << endl;

	cin >> xval >> yval;

	if (0 > yval) {
		cout << "The second integer must be equal to or bigger than 0" << endl;
	}

	cout << "Result of raising " << xval << " to the power of " << yval
		<< " is " << power(xval, yval) << endl;

	system("PAUSE");
	return 0;
}

 

 

 

指针形参:

函数的形参可以是指针,此时将复制实参指针。与其他非引用类型的形参一样,该类形参的任何改变也仅作用于局部副本。如果函数将新指针赋给形参,主调函数使用的实参指针的值没有改变。如果函数形参是非 const 类型的指针,则函数可通过指针实现赋值,修改指针所指向对象的值。

 

利用const 引用避免复制

 

数组形参

数组有两个特殊的性质,影响我们定义和使用作用在数组上的函数:

一是不能复制数组;

二是使用数组名字时,数组名会自动转化为指向其第一个元素的指针。因为数组不能复制,所以无法编写使用数组类型形参的函数。因为数组会被自动转化为指针,所以处理数组的函数通常通过操纵指向数组中的元素的指针来处理数组。

 

数组实参

和其他类型一样,数组形参可定义为引用或非引用类型。大部分情况下,数

组以普通的非引用类型传递,此时数组会悄悄地转换为指针。

 

Code

// TestC++0920_001.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

//传递指向数组第一个和最后一个元素的下一位置的指针来计算数组和
int sum1(const int *begin, const int *end) {
	int sum = 0;
	while (begin != end) {
		sum += *begin++;
	}
	return sum;
}

//传递数组和大小来计算数组和
int sum2(const int ia[], size_t size) {
	int sum = 0;
	for (size_t ix = 0; ix != size; ++ix) {
		sum += ia[ix];
	}
	return sum;
}

//传递指向数组第一个元素的指针和数组大小来计算数组和
int sum3(int *begin, size_t size) {
	int sum = 0;
	int *p = begin;
	while (p != begin + size) {
		sum += *p++;
	}
	return sum;	
}

int _tmain(int argc, _TCHAR* argv[])
{
	int ia[] = {1, 2, 3, 4, 5};

	//三种不同方式计算数组元素
	cout << "Summation from sum1(): " << sum1(ia, ia + 4) << endl;
	cout << "Summation from sum2(): " << sum2(ia, 4) << endl;
	cout << "Summation from sum3(): " << sum3(ia, 4) << endl;

	system("PAUSE");
	return 0;
}

 

内联函数(函数避免函数调用的开销)

注意:调用函数比求解等价表达式要慢得多。在大多数的机器上,调用函数都要做很多工作;调用前要先保存寄存器,并在返回时恢复;复制实参;程序还必须转向一个新位置执行。

 

一般来说,内联机制适用于优化小的、只有几行的而且经常被调用的函数。大多数的编译器都不支持递归函数的内联。一个 1200 行的函数也不太可能在调用点内联展开。内联函数应该在头文件中定义,这一点不同于其他函数。

在头文件中加入或修改 inline 函数时,使用了该头文件的所有源文件都必须重新编译。

 

Code

 

// inline version: find longer of two strings
inline const string &shorterString(const string &s1, const string &s2) {
	return s1.size() < s2.size() ? s1 : s2;
}

 

构造函数

构造函数是特殊的成员函数,与其他成员函数不同,构造函数和类同名,而且没有返回类型。而与其他成员函数相同的是,构造函数也有形参表(可能为空)和函数体。一个类可以有多个构造函数,每个构造函数必须有与其他构造函数不同数目或类型的形参。

重载函数

出现在相同作用域中的两个函数,如果具有相同的名字而形参表不同,则称为重载函数

候选函数

函数重载确定的第一步是确定该调用所考虑的重载函数集合,该集合中的函数称为候选函数。候选函数是与被调函数同名的函数,并且在调用点上,它的声明可见

可行函数

指从候选函数中选出来的函数。必须满足两个条件:第一,函数的形参个数与该调用的实参个数相同;第二,每一个实参的类型必须与对应形参的类型匹配,或者可被隐式转换为对应的形参类型。

指向函数的指针

函数指针是指指向函数而非指向对象的指针。像其他指针一样,函数指针也指向某个特定的类型。函数类型由其返回类型以及形参表确定,而与函数名无关。

code

 

 

 

bool (*pf)(const string &, const string &);
//这个语句将 pf 声明为指向函数的指针,它所指向的函数带有两个 const //string& 类型的形参和 bool 类型的返回值。
//*pf 两侧的圆括号是必需的

 

2
0
分享到:
评论

相关推荐

    C++学习笔记--函数指针

    C++学习笔记--函数指针 函数指针 程序运行期间。每个函数都会占用一段连续的内存空间。而函数名就是该函数所占内存区域的起始地址(也称“入口地址”)。我们可以将函数入口地址赋给一个指针变量,使该指针变量...

    C++整理笔记word版——01 C++学习笔记

    C++基础的学习笔记(其中的代码源件可私信留言) C++中的空头程序 使用C++书写hello world 学习变量 学习常量 标识符命名规则 数据类型 运算符 程序流程结构 数组 函数 指针 结构体

    Effective Modern C++学习笔记

    《Effective Modern C++:改善C++11和C++14的42个具体做法(影印版)(英文版)》中包括以下主题:剖析花括号初始化、noexcept规范、完美转发、智能指针make函数的优缺点;讲解std∷move,std∷forward,rvalue引用和全局...

    C++学习笔记--函数

    VS2013调试,可以直接运行。由几个例子组成,备份留作以后查看。

    C++学习笔记- 面向对象 .md

    C++学习笔记,博主个人向。内容是C++面对对象的,目录大致来源于菜鸟文档的C++面向对象,笔记是参考各种文章以及菜鸟文档改编的,内容包含C++类和对象(类定义和对象定义,类成员函数,类访问修饰符,友元函数,内联...

    C++学习笔记、常见面试知识点.zip

    C++学习笔记和常见面试知识点,C++11特性,包括多态、虚表、移动语义、友元函数、符号重载、完美转发、智能指针、const和static、数组指针和指针数组、struct内存对齐、enum和union关键字等等。帮助了解C++的特性,...

    C++虚函数和多态学习笔记

    C++虚函数和多态学习笔记

    mfc c++视频笔记

    c++学习,mfc视频 笔记 构造函数:类创建一个变量后,就要为其分配内存空间,该内存空间就是由构造函数来分配的;每个类都必须创建一个构造函数,没有的话,就不能创建对象,如果没有定义构造函数,编译器会默认提供...

    P237~242C++内建函数仿函数学习笔记.docx

    P237~242C++内建函数仿函数学习笔记.docx

    C++Primer Plus学习笔记(四)

    第八章函数探幽 内联函数 默认参数 函数重载 函数模板

    C++Primer Plus学习笔记(三)

    C++ primer plus学习笔记之三,分为一下几个部分: 函数参数:介绍了函数的生命规则以及定义 数组函数:数组作为变量时的使用方法 指针和const:灵活运用指针和const 函数和二维数组:二维数组作为变量时声明以及定义...

    P167~184C++类和函数模板学习笔记.docx

    P167~184C++类和函数模板学习笔记.docx

    C++学习笔记【原创】

    【原创】自己长久以来的C++学习记录,包含编程经验心得,基本函数语法说明等。初学者可以借鉴。

    C++ Polymorphism 笔记 1

    欢迎来到我的个人C++学习笔记!这是我在学习C++编程语言过程中的记录和心得分享。我希望这些笔记能够帮助那些刚开始接触C++的新手们理解基本概念、语法规则以及编程技巧。 在这里,您会找到从基础语法到高级特性的...

    C++学习笔记,高级教程部分(文件和流,内存分配,异常处理机制等)

    C++学习笔记---高级教程部分。博主自用。内容包含:文件和流,异常处理机制,动态内存,命名空间,模版(类模版,函数模版),预处理器,和信号处理机制。包含代码示例。

    C++机器学习笔记.md

    内容概要: 本文介绍了使用C++编程语言实现机器学习算法的方法,包括线性回归、决策树和支持向量机(SVM)。每个算法都配有代码示例,详细展示了实现过程和关键思想。此外,文章还提供了两个示例,分别展示了如何...

    Visual C++学习笔记

    以上方法常用于动态生成控件,虽说用控件的Create函数可以动态生成控件,但这种控件很不好控制,所以用隐藏、显示方法不失为一种替代手段。

    C++整理笔记word版 ——02 C++核心编程

    C++整理笔记word版 本阶段主要针对C++面向对象编程技术做详细讲解,探讨C++中的核心和精髓。是01 C++学习笔记的后续补充 内存分区模型 引用 函数提高 类和对象 文件操作

    VC++深入详解学习笔记

    VC++深入详解学习笔记 窗口产生过程,句柄原理,消息队列,回调函数,窗口关闭与应用程序退出的工作关系,使用VC++的若干小技巧,stdcall与Lessonecl调用规范的比较,初学者常犯错误及注意事项。

    C++学习笔记,易错点

    C++中的类成员声明static;strlen函数计算首地址到'\0'间的元素数目,不包括'\0';指针的含义:int* a;那么*a意思是取值,取多少字节呢,就取sizeof(int)个字节,并读取为一个int型整数。A* a;那么*a会取sizeof(A)个...

Global site tag (gtag.js) - Google Analytics