| 維度 | 面向過程 (POP) | 面向對象 (OOP) |
|---|---|---|
| 核心單元 | 函數/過程 | 對象 (數據+行為封裝) |
| 思維方式 | 自頂向下,步驟分解 | 自底向上,對象協作 |
| 代碼復用 | 複製修改/函數庫 | 繼承/組合/多態 |
| 維護擴展 | 牽一髮動全身 | 高內聚低耦合,易擴展 |
| 適用場景 | 簡單、線性、算法型任務 | 複雜、業務建模、長期演進系統 |
算法:Siamese 方法(從第一行中間列開始,向右上斜向填數,衝突則下移一行)。
#include
#include
using namespace std;
vector> magicMatrix(int n) {
vector> a(n, vector(n, 0));
int r = 0, c = n / 2;
for (int v = 1; v <= n * n; v++) {
a[r][c] = v;
int nr = (r - 1 + n) % n;
int nc = (c + 1) % n;
if (a[nr][nc] != 0) nr = (r + 1) % n, nc = c; // 衝突下移
r = nr; c = nc;
}
return a;
}
int main() {
int n; cout << "Please input an odd positive integer: "; cin >> n;
if (n % 2 == 0) return 1;
auto m = magicMatrix(n);
cout << "Find " << n << "*" << n << " magic matrix\n";
for (auto &row : m) {
for (int v : row) cout << v << ' ';
cout << '\n';
}
}
#include
#include
#include
using namespace std;
class Set {
vector elems; // 有序無重複
void sort_unique() {
sort(elems.begin(), elems.end());
elems.erase(unique(elems.begin(), elems.end()), elems.end());
}
public:
Set() {}
Set(const vector& v) : elems(v) { sort_unique(); }
Set(const Set&) = default;
~Set() = default;
void add(int x) { if (!contains(x)) elems.push_back(x), sort_unique(); }
void remove(int x) { elems.erase(remove(elems.begin(), elems.end(), x), elems.end()); }
void display() const { for (int v : elems) cout << v << ' '; cout << '\n'; }
int size() const { return elems.size(); }
bool contains(int x) const { return binary_search(elems.begin(), elems.end(), x); }
// 運算符重載
Set operator+(const Set& o) const { // 並集
Set r = *this; for (int v : o.elems) r.add(v); return r;
}
Set operator-(const Set& o) const { // 差集
Set r; for (int v : elems) if (!o.contains(v)) r.add(v); return r;
}
Set operator*(const Set& o) const { // 交集
Set r; for (int v : elems) if (o.contains(v)) r.add(v); return r;
}
};
int main() {
Set A({1,2,3,3}), B({3,4,5});
(A + B).display(); // 1 2 3 4 5
(A - B).display(); // 1 2
(A * B).display(); // 3
}
掌握 OOP 核心思想與經典算法實現,是程序設計基本功。