学习参数传递及const成员变量初始化
生活随笔
收集整理的這篇文章主要介紹了
学习参数传递及const成员变量初始化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
該說的都在代碼及注釋中。
?
練習代碼:
1 #include <stdlib.h> 2 #include <memory.h> 3 4 /** 5 * @author:zanzan101 6 */ 7 8 // 這里的參數聲明時: 9 // int** arr 調用時錯誤! 10 // int arr[][] 聲明時錯誤! 11 // int arr[][1] 調用時錯誤! 12 // 唯一要求準確的條件是一維空間的長度,即需要知道列數,不需要知道行數,需要知道行的長度 13 int sum_array(int arr[][5]) 14 { 15 int sum = 0; 16 for(int i = 0; i < 5; i ++) 17 for(int j = 0; j < 5; j ++) 18 sum += arr[i][j]; 19 return sum; 20 } 21 // 傳指針的指針也可以傳遞二維數組過來 22 int sum_array_2(int** arr, int m, int n) 23 { 24 int sum = 0; 25 for(int i = 0; i < m; i ++) 26 for(int j = 0; j < n; j++) 27 sum += arr[i][j]; 28 return sum; 29 } 30 int sum_array_3(int* arr[5]) 31 { 32 int sum = 0; 33 for(int i = 0; i < 5; i ++) 34 for(int j = 0; j < 5; j ++) 35 sum += arr[i][j]; 36 return sum; 37 } 38 39 40 void func(int i) 41 { 42 printf("func_i\n"); 43 } 44 void func(double d) 45 { 46 printf("func_d\n"); 47 } 48 49 struct S1 50 { 51 int v; 52 }; 53 struct S2 54 { 55 char c; 56 }; 57 58 class A 59 { 60 private: 61 static const int v; 62 static int w; 63 public: 64 void func(S1) 65 { 66 printf("A v=%d\n", v); 67 } 68 }; 69 70 // 這是一種初始化static const類型的方式 71 const int A::v = 2; 72 // 這是一種初始化static的方式 73 int A::w = 3; 74 75 class B: public A 76 { 77 private: 78 // 這是第二種初始化static const的方式 79 static const int u = 2; 80 81 // 這是錯誤的初始化方法 82 // error C2864: “B::x”: 只有靜態常量整型數據成員才可以在類中初始化 83 // static int x = 3; 84 public: 85 86 void func(S2) 87 { 88 printf("B1\n"); 89 } 90 int func(S1, S2) 91 { 92 printf("B2\n"); 93 return 1; 94 } 95 }; 96 97 int main() 98 { 99 int arr[5][5] = {0}; 100 arr[3][1] = 9; 101 arr[2][0] = 1; 102 arr[4][4] = 10; 103 int sum = sum_array(arr); 104 printf("%d\n", sum); 105 int** arr_2 = new int*[5]; 106 for(int i = 0; i < 5; i ++) 107 { 108 arr_2[i] = new int[5]; 109 memset(arr_2[i], 0, 5*sizeof(int)); 110 } 111 arr_2[3][1] = 9; 112 arr_2[2][0] = 1; 113 arr_2[4][4] = 10; 114 115 // 感覺優于第一種方法,因為這里不需要在函數中限定維度 116 sum = sum_array_2(arr_2, 5, 5); 117 printf("%d\n", sum); 118 119 // error C2664: “sum_array”: 不能將參數 1 從“int **”轉換為“int [][5]” 120 // sum = sum_array(arr_2); 121 // printf("%d\n", sum); 122 123 // 以下聲明錯誤: 124 // error C2440: “初始化”: 無法從“int [5][5]”轉換為“int **” 125 // int** arr_3 = arr; 126 127 // 以下方法錯誤: 128 // 因為arr_3不為空,但它所指向的指針為空,這里沒有理解. 129 /* 130 int** arr_3 = (int**)arr; 131 sum = sum_array_2(arr_3, 5, 5); 132 printf("%d\n", sum); 133 134 sum = sum_array_3(arr_3); 135 printf("%d\n", sum); 136 */ 137 138 func(1); 139 func(1.0); 140 A a; 141 a.func(S1()); 142 B b; 143 // C++的類繼承中,有以下特點: 144 // 當子類中沒有與父類非虛函數重名的函數時: 145 // 可以調用父類的函數 146 // 當子類中有任何一個與父類非虛函數重名的函數時(不管返回值類型和參數類型及個數): 147 // 父類中的函數失效,只能調用到子類中的該名稱的函數 148 // 以下用法錯誤: 149 // 因為父類中的函數失效,只能調用子類中的名為func的函數: 150 // b.func(S1()); 151 152 // 正確用法: 153 b.func(S2()); 154 b.func(S1(), S2()); 155 156 157 system("pause"); 158 159 return 0; 160 }輸出:
20 20 func_i func_d A v=2 B1 B2 請按任意鍵繼續. . .?
轉載于:https://www.cnblogs.com/zanzan101/p/3373198.html
總結
以上是生活随笔為你收集整理的学习参数传递及const成员变量初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用wget循环获取指定url下的文件
- 下一篇: 解决在配置Oracle数据库连接错误问题