`
Etwo
  • 浏览: 104489 次
  • 性别: 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++ 语言概述 **1、历史背景** - **C++ 的江湖地位** - Java、C、C++、Python、C# 是当前主流的编程语言之一,而 C++ 在这些语言中以其高效性和灵活性著称。 - **C++ 之父 ...

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

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

    c++学习笔记.pdf

    C++是一种静态类型、编译式、通用的编程语言,它支持过程化编程、面向对象编程和泛型编程。C++广泛应用于软件开发领域,包括操作...以上内容覆盖了C++语言中一些基础知识点,对于学习和理解C++编程具有重要的指导意义。

    C++ 学习笔记 整理

    这份"C++学习笔记"涵盖了C++的基础到高级概念,旨在帮助初学者和有一定经验的程序员深入理解并掌握C++。 在C++的学习过程中,以下几个关键知识点是不可或缺的: 1. **基础语法**:C++起源于C语言,因此它保留了...

    C++学习笔记.doc

    【C++ 学习笔记】深入理解编程与C++基础 C++是一种强大的、面向对象的编程语言,广泛应用于系统软件、游戏开发、嵌入式系统以及许多高性能应用。学习C++不仅仅是掌握语法,更重要的是理解编程的核心概念,以便更好...

    【C++学习笔记】一份详细的学习笔记,让你轻松掌握C++编程!

    【C++学习笔记】这份详尽的资源是为那些希望深入了解C++编程语言的人们精心准备的。C++是一种强大的、通用的编程语言,它的设计理念是面向对象,同时支持过程化编程,使得它在系统软件、应用软件、游戏开发、设备...

    C++学习笔记--函数

    **C++学习笔记--函数** 在C++编程中,函数是一种可重用的代码块,它执行特定的任务并可能接收参数、返回值或两者都有。本笔记将深入探讨C++中的函数,包括它们的定义、调用、参数传递以及如何在实际编程中有效地...

    c++学习笔记(个人学习时做的笔记)

    【C++学习笔记概述】 C++是一门强大的编程语言,其在C语言的基础上进行了扩展,引入了许多现代化的特性。这份笔记主要涵盖了C++的基础知识,包括C++11和C++17的新特性,旨在帮助初学者理解C++的核心概念。 ### C++...

    c++学习笔记

    这份"C++学习笔记"涵盖了C++的基础概念、语法结构、面向对象编程以及可能的高级主题,旨在帮助初学者或者有经验的程序员巩固C++知识。 首先,C++是从C语言发展而来,它保留了C语言的效率,同时引入了类和对象的概念...

    新手C++学习笔记(仅供菜鸟成长参考).rar

    《新手C++学习笔记》是一份专为编程初学者打造的资源,旨在帮助那些刚刚踏入C++编程领域的“菜鸟”快速成长。这份笔记包含了前辈们的实践经验总结,具有很高的学习价值。文档以.doc格式存储,方便读者使用常见的文字...

    C++学习笔记.docx

    C++学习笔记 本文档提供了C++语言的基础知识,包括输入输出、变量、数据类型、运算符、内存管理、指针、流程控制语句等。 输入输出 C++语言提供了多种输入输出方式,包括使用cin和cout对象。cin对象用于从标准...

    黑马C++学习笔记

    "黑马C++学习笔记" 本笔记主要记录了C++的基础知识和一些重要的概念,包括变量的声明、赋值、输出、引用、指针、结构体等。 变量声明和赋值 在C++中,变量的声明和赋值是非常重要的。变量可以是整数、浮点数、...

    C++学习笔记经典(与C比较)

    《C++学习笔记经典(与C比较)》这份资料应该会详细讲解这些知识点,并通过实例来帮助读者深入理解C++与C的差异,以及如何在实际编程中应用C++的特性和功能。这份资料可能会涵盖基本语法、类和对象、模板、STL的使用...

    达内学生的C++学习笔记

    《达内学生C++学习笔记》是一份专为初学者设计的C++教程,旨在提供清晰易懂、逐步深入的学习路径。这份笔记涵盖了C++语言的基础到进阶内容,是学习C++的理想辅助资料。 首先,C++是一种静态类型的、编译式的、通用...

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

    C++是一种强大的面向对象编程语言,它源自C语言并扩展了其功能,包括类、模板、异常处理等高级特性。以下是对C++基础知识点的详细解释: 1. **空头程序**:C++中的空头程序是一个没有实际操作的简单程序,通常用于...

    C语言和C++Builder学习笔记.rar_C++笔记_c++学习笔记_c/C++_学习笔记_编程语言

    【C语言和C++Builder学习笔记】 C语言和C++是两种广泛使用的编程语言,它们在软件开发领域占据着重要地位。C语言以其简洁、高效和底层操作能力著称,而C++则在C的基础上引入了面向对象编程,极大地扩展了其应用范围...

    C++学习笔记:关于C++类与动态内存分配中布局new操作符

    C++学习笔记:关于C++类与动态内存分配中布局new操作符 在C++中,new操作符是一种动态内存分配方式,用于在堆上分配内存以存储对象。但是,在某些情况下,我们需要使用布局new操作符来分配内存,例如在现有的内存块...

    C++ Builder 学习笔记

    这篇学习笔记主要探讨的是如何在C++ Builder中实现一个可新建文件夹的选择目录对话框。 选择目录对话框是许多应用中常见的功能,它允许用户浏览文件系统并选择一个文件夹。在C++ Builder中,我们可以利用Windows ...

    C++学习笔记.chm

    在《C++学习笔记》中,你将找到关于以上所有主题的详细解释和实例。通过深入阅读和实践,你可以逐步掌握C++的精髓,成为一名熟练的C++开发者。这份笔记不仅适合初学者,也对有一定经验的程序员在回顾和巩固C++知识时...

Global site tag (gtag.js) - Google Analytics