C++言語の基本概念と機能概要

名前空間

識別子の名前衝突を防止するためのnamespaceキーワードについて解説する。異なるスコープで同名の要素を定義可能。

namespaceの基本構文

namespace MathLib {
    double pi = 3.14159;
    
    double circle_area(double r) {
        return pi * r * r;
    }
    
    struct Point {
        double x, y;
    };
}

namespace PhysicsLib {
    double gravity = 9.8;
    
    double calc_force(double mass) {
        return mass * gravity;
    }
}

名前空間のアクセス方法

  1. スコープ解決演算子: MathLib::pi
  2. using宣言: using MathLib::circle_area;
  3. 名前空間全体の展開: using namespace MathLib;

C++基本構造

#include <iostream>

int main() {
    std::cout << "Hello C++" << std::endl;
    int value;
    std::cin >> value;
    return 0;
}

デフォルト引数

void draw_rect(int w, int h = 10, char fill = '*') {
    for(int i=0; i<h; ++i) {
        std::cout << std::string(w, fill) << '\n';
    }
}

注意: デフォルト値は右側から連続して指定必須。宣言と定義で重複不可。

関数オーバーロード

float compute(float a, float b) { return a*b; }
float compute(float r) { return 3.14f*r*r; }
int compute(int a, int b, int c) { return a+b+c; }

実装原理: 名前修飾(name mangling)により引数情報を符号化

extern "C"

extern "C" {
    #include "c_library.h"
    void legacy_function();
}

参照

int main() {
    int orig = 100;
    int& alias = orig;  // 参照の宣言
    alias = 200;        // origの値変更
}

参照の特性: 初期化必須、再代入不可、権限縮小のみ可能

参照の用途

void swap_values(int& x, int& y) {
    int tmp = x;
    x = y;
    y = tmp;
}

インライン関数

inline int min_val(int a, int b) {
    return (a < b) ? a : b;
}

注意: 小規模関数向け、ヘッダでの定義推奨

autoキーワード

auto num = 42;             // int
auto name = "C++";         // const char*
auto result = sqrt(25.0);  // double

制約: 初期化必須、関数引数不可、配列宣言不可

範囲ベースforループ

int nums[] = {1, 2, 3, 4};
for(auto n : nums) {
    std::cout << n << ' ';
}

nullptr

int* ptr = nullptr;  // 型安全な空ポインタ
if(ptr == nullptr) {
    // 処理
}

従来のNULLマクロより安全な代替手段

タグ: 名前空間 デフォルト引数 関数オーバーロード 参照 インライン関数

6月8日 19:25 投稿