シリーズ: C++
cpp
132 行
· 更新日 2026-04-03
overloading.cpp
C++/Part1_基礎入門/Ch04_函式/overloading.cpp
// ============================================================
// Ch04 — 函式多載(Function Overloading)
// 編譯:g++ -std=c++17 -Wall -o overloading overloading.cpp
// ============================================================
#include <iostream>
#include <string>
#include <cmath>
// ── 1. print() 多載:不同型別 ──
void print(int value) {
std::cout << "[int] " << value << "\n";
}
void print(double value) {
std::cout << "[double] " << value << "\n";
}
void print(const std::string& value) {
std::cout << "[string] " << value << "\n";
}
void print(char value) {
std::cout << "[char] " << value << "\n";
}
void print(bool value) {
std::cout << "[bool] " << (value ? "true" : "false") << "\n";
}
// ── 2. add() 多載:不同型別與參數數量 ──
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
std::string add(const std::string& a, const std::string& b) {
return a + b; // 字串串接
}
// ── 3. area() 多載:不同形狀 ──
// 圓形面積:只需半徑
double area(double radius) {
return M_PI * radius * radius;
}
// 長方形面積:需要寬和高
double area(double width, double height) {
return width * height;
}
// 三角形面積:底和高(用第三個參數區分)
double area(double base, double height, bool isTriangle) {
if (isTriangle) {
return 0.5 * base * height;
}
return base * height; // 非三角形就當長方形
}
// ── 4. max() 多載 ──
int max(int a, int b) {
return (a > b) ? a : b;
}
double max(double a, double b) {
return (a > b) ? a : b;
}
int max(int a, int b, int c) {
return max(max(a, b), c); // 呼叫兩參數版本
}
// ── 主程式 ────────────────────────────────────────
int main() {
std::cout << "===== Ch04:函式多載 =====\n\n";
// ── 1. print() 多載示範 ──
std::cout << "【1】print() — 不同型別的多載\n";
print(42);
print(3.14);
print(std::string("你好世界"));
print('A');
print(true);
std::cout << "\n";
// ── 2. add() 多載示範 ──
std::cout << "【2】add() — 不同型別和參數數量\n";
std::cout << "add(3, 5) = " << add(3, 5) << "\n";
std::cout << "add(2.5, 3.7) = " << add(2.5, 3.7) << "\n";
std::cout << "add(1, 2, 3) = " << add(1, 2, 3) << "\n";
std::string s1 = "C++";
std::string s2 = "真好玩";
std::cout << "add(\"C++\", \"真好玩\") = " << add(s1, s2) << "\n\n";
// ── 3. area() 多載示範 ──
std::cout << "【3】area() — 不同形狀的面積計算\n";
std::cout << "圓形(半徑 5) = " << area(5.0) << "\n";
std::cout << "長方形(4 x 6) = " << area(4.0, 6.0) << "\n";
std::cout << "三角形(底 8 高 3)= " << area(8.0, 3.0, true) << "\n\n";
// ── 4. max() 多載示範 ──
std::cout << "【4】max() — 不同型別和參數數量\n";
std::cout << "max(10, 20) = " << max(10, 20) << "\n";
std::cout << "max(3.14, 2.72) = " << max(3.14, 2.72) << "\n";
std::cout << "max(5, 12, 8) = " << max(5, 12, 8) << "\n\n";
// ── 5. 多載的解析過程說明 ──
std::cout << "【5】多載解析說明\n";
std::cout << "編譯器根據以下順序選擇最佳匹配:\n";
std::cout << " 1. 精確匹配\n";
std::cout << " 2. 型別提升(如 char→int, float→double)\n";
std::cout << " 3. 標準轉換(如 int→double)\n";
std::cout << " 4. 使用者定義轉換\n\n";
// 型別提升範例
std::cout << "print('A') 呼叫 print(char) 而非 print(int):\n";
print('A');
std::cout << "\n注意:僅靠回傳型別不同無法構成多載!\n";
std::cout << "例如 int f() 和 double f() 會造成編譯錯誤。\n";
return 0;
}
関連記事
C++
c
更新日 2026-07-21
deviceAlpha.h
deviceAlpha.h — c source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/deviceAlpha.h).
記事を読む →
C++
c
更新日 2026-07-21
finalproject.c
finalproject.c — c source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/finalproject.c).
記事を読む →
C++
cpp
更新日 2026-07-21
finalproject.cpp
finalproject.cpp — cpp source code from the C++ learning materials (C++/Mavis_Homework/FinalProject/finalproject.cpp).
記事を読む →
C++
c
更新日 2026-07-21
deviceAlpha.h
deviceAlpha.h — c source code from the C++ learning materials (C++/Mavis_Homework/Lab8/deviceAlpha.h).
記事を読む →
C++
c
更新日 2026-07-21
lab8.c
lab8.c — c source code from the C++ learning materials (C++/Mavis_Homework/Lab8/lab8.c).
記事を読む →
C++
cpp
更新日 2026-07-21
lab8.cpp
lab8.cpp — cpp source code from the C++ learning materials (C++/Mavis_Homework/Lab8/lab8.cpp).
記事を読む →