C++编程基础二 10-函数重载

  1 // C++函数和类 10-函数重载.cpp: 定义控制台应用程序的入口点。
  2 //
  3 
  4 #include "stdafx.h"
  5 #include <iostream>
  6 #include <array>
  7 #include <math.h>
  8 #include <climits>
  9 #include <string>
 10 using namespace std;
 11 //如果同一个作用域内的几个函数名字相同但形参列表不同,
 12 //我们称之为重载函数。
 13 //void print(const char*cp);
 14 //void print(const int *beg, const int *end);
 15 //void print(const int ia[], size_t size);
 16 //这些函数接收的形类型不一样,但是执行的操作非常类似。当调用这些函数时,编译器和根据
 17 //传递的实参类型推断想要的是哪个函数。
 18 
 19 
 20 //重载函数,名称相同但是参数列表不同的函数,调用时,系统会根据传递的实参来选择调用的函数。
 21 void print(const char *cp);
 22 void print(const int *beg, const int *end);
 23 void print(const int ia[], size_t size);
 24 int sum_arr(const int arr[], int n);
 25 
 26 void fill_arr(int arr[], int n);
 27 void ratio(int arr[], int n, int sum);
 28 void print_arr(const int arr[], int n);
 29 int main()
 30 {
 31     char c = 'a'; 
 32     //传递的实参是char类型的指针,所以会调用第一个函数。
 33     print(&c);
 34 
 35     const size_t size =5;
 36     int arr[size] = { 2,3,3 };
 37     //传递的实参是两个int类型的指针,所以会调用第二个函数。
 38     print(&arr[2], &arr[size - 1]);
 39     //传递的实参是数组名和一个size_t类型的值,所以会调用第三个函数。
 40     print(arr, size);
 41     
 42     //print(arr); //传递的实参是数组名,但是没有和它相对应的参数列表的函数,所以会出错。
 43 
 44     const int size2 = 6;
 45     int student1[size2] = { 120,110,100,90,85,95 };
 46     int totalScore = sum_arr(student1, size2);
 47     cout << "该名学生的总成绩为:" << totalScore << endl;
 48 
 49     int student2[size2] = {};
 50     fill_arr(student2, size2);
 51     totalScore = sum_arr(student2, size2);
 52     cout << "该学生的各科成绩为:";
 53     print_arr(student2, size2);
 54     ratio(student2,size2,totalScore);
 55     cout << "各科成绩所占百分比(%): " << endl;
 56     print_arr(student2, size2);
 57 
 58     return 0;
 59 }
 60 
 61 void print(const char *cp)
 62 {
 63     cout<<"1:"<< *cp << endl;
 64 }
 65 
 66 void print(const int *beg, const int *end)
 67 {
 68     int length = end - beg;
 69     for (int i = 0; i <= length; i++)
 70     {
 71         cout << "2:" << *(beg + i) << endl;
 72     }
 73 }
 74 
 75 void print(const int ia[], size_t size)
 76 {
 77     for (int i = 0; i < size; i++)
 78     {
 79         cout << "3:" << ia[i] << endl;
 80     }
 81 }
 82 
 83 //arr 是一个指针,指向数组的第一个元素,const int类型,所以不能修改数组内的值。
 84 //n是数组的大小
 85 //在函数体内,可以将arr直接当做数组名使用,*arr和arr[]的意义相同。
 86 int sum_arr(const int arr[], int n) //这么写是为了避免出错在写代码时在某个地方修改了数组的值。求和运算时不需要修改数组内的值的。
 87 {
 88     int res = 0;
 89     for (int i = 0; i < n; i++)
 90     {
 91         res += arr[i];
 92     }
 93     return res;
 94 }
 95 
 96 //填充数组或修改数组:由于接收数组名参数的函数访问的是原始数组(使用指针访问),而不是副本,
 97 //因此可以通过调用改函数将值赋给数组元素,或是修改数组元素的值。
 98 //显示数组以及保护数组:为了确保显示函数不修改原始数组,可以在声明形参是使用关键字const。
 99 //二维数组:int sum (int ar2[][4],int size);
100 
101 void fill_arr(int arr[], int n)
102 {
103     cout << "请输入该学生的成绩(语数外物化生):" << endl;
104     int temp;
105     for (int i = 0; i < n; i++)
106     {
107         cin >> temp;
108         arr[i] = temp;
109     }
110 }
111 void ratio(int arr[], int n, int sum)
112 {
113     for (int i = 0; i < n; i++)
114     {
115         arr[i] = arr[i] * 100 / sum;
116     }
117 }
118 void print_arr(const int arr[], int n)
119 {
120 
121     for (int i = 0; i < n; i++)
122     {
123         cout << arr[i] << " ";
124     }
125     cout << endl;
126 }

猜你喜欢

转载自www.cnblogs.com/uimodel/p/9348597.html