Function overloading và cách thay thế trong C
C++ chọn overload theo parameter type; C cần tên khác nhau hoặc generic dispatch.
Function overloading và cách thay thế trong C là gì?
C++ chọn overload theo parameter type; C cần tên khác nhau hoặc generic dispatch.
Dùng cùng một operation cho nhiều type.
Điểm quan trọng
- Hiểu cơ chế trong C trước khi học abstraction của C++.
- Dùng RAII và value semantics để diễn đạt ownership.
- Ưu tiên abstraction type-safe hơn macro và cast.
Code ví dụ bằng C và C++
main.c
#include <stdio.h>
int max_int(int left, int right) {
return left > right ? left : right;
}
double max_double(double left, double right) {
return left > right ? left : right;
}
int main(void) {
printf("%d %.1f\n", max_int(3, 8), max_double(4.5, 2.0));
}
8 4.5
C++
main.cpp
#include <iostream>
int maximum(int left, int right) {
return left > right ? left : right;
}
double maximum(double left, double right) {
return left > right ? left : right;
}
int main() {
std::cout << maximum(3, 8) << ' '
<< maximum(4.5, 2.0) << '\n';
}
8 4.5
So sánh C và C++
C encode type trong function name; C++ giữ một tên và resolve lúc compile mà không tốn runtime.
C
C dùng naming convention, callback, macro và context struct.
C++
Tính năng ngôn ngữ cung cấp abstraction có scope, type-safe và thường zero-overhead.
Bài tập mở rộng
Chạy cả hai phiên bản rồi thay đổi để quan sát khác biệt về bảo đảm của từng ngôn ngữ.
- Viết cơ chế bằng C trước abstraction C++.
- Loại bỏ manual cleanup bằng RAII.
- Kiểm tra allocation hoặc virtual dispatch phát sinh.