Aller au contenu

C++

Avy amin'i Wikibooks

Fampidirana ny C++ sy ny OOP

[hanova]

C++ dia fiteny fandaharana malaza izay manohana ny fananganana zavatra (Object-Oriented Programming - OOP). Ny OOP dia fomba fandaharana izay mampiasa kilasy sy zavatra ho fototra amin'ny famoronana kaody miorina tsara sy azo ampiasaina indray. Ity pejy ity dia manome topi-maso momba ny endri-javatra lehibe amin'ny OOP amin'ny C++.

Kilasy sy Zavatra

[hanova]

Ny kilasy dia fototra amin'ny OOP ary dia modely ampiasaina hamoronana zavatra iray izay manana toetra sy asa manokana.

#include <iostream>
#include <string>

class Olona {
public:
    // Constructor
    Olona(std::string anarany, int taonany) : anarana(anarany), taona(taonany) {}

    // Method
    void aseho() const {
        std::cout << "Anarana: " << anarana << ", Taona: " << taona << std::endl;
    }

private:
    std::string anarana;
    int taona;
};

int main() {
    Olona rakoto("Rakoto", 30);
    rakoto.aseho();
    return 0;
}

Fananana (Attributes) sy Fomba (Methods)

[hanova]

Ny fananana dia tahiry ao amin'ny kilasy, ary ny fomba dia asa iray atao ao amin'ny kilasy.

class Vokatra {
public:
    Vokatra(std::string anarana, double vidiny) : anarana(anarana), vidiny(vidiny) {}

    void aseho() const {
        std::cout << "Vokatra: " << anarana << ", Vidiny: " << vidiny << std::endl;
    }

private:
    std::string anarana;
    double vidiny;
};

Encapsulation (Fanakonana)

[hanova]

Encapsulation dia fomba fampidirana ny fananana sy fomba ao amin'ny kilasy iray ary miaro azy amin'ny fanitsakitsahana avy any ivelany. Ity dia atao amin'ny alalan'ny fampiasana ny teny fanalahidy private sy public.

class BankAccount {
public:
    BankAccount(std::string anarana, double balansy) : anarana(anarana), balansy(balansy) {}

    void asehoBalansy() const {
        std::cout << "Balansy: " << balansy << std::endl;
    }

private:
    std::string anarana;
    double balansy;
};

Inheritance (Fandovana)

[hanova]

Ny inheritance dia mamela ny kilasy iray handova ny toetra sy fomba avy amin'ny kilasy iray hafa. Io dia ahafahanao mamerina mampiasa kaody amin'ny alalan'ny fananganana kilasy vaovao avy amin'ny kilasy efa misy.

class Mpiasa {
public:
    Mpiasa(std::string anarany, double karama) : anarana(anarany), karama(karama) {}

    void asehoMpiasa() const {
        std::cout << "Mpiasa: " << anarana << ", Karama: " << karama << std::endl;
    }

protected:
    std::string anarana;
    double karama;
};

class Mpitantana : public Mpiasa {
public:
    Mpitantana(std::string anarany, double karama, int isaMpiasa) : Mpiasa(anarany, karama), isaMpiasa(isaMpiasa) {}

    void asehoMpitantana() const {
        asehoMpiasa();
        std::cout << "Isan'ny Mpiasa Tantanana: " << isaMpiasa << std::endl;
    }

private:
    int isaMpiasa;
};

Polymorphism

[hanova]

Polymorphism dia ny fahafahan'ny kilasy na zavatra miovaova amin'ny endrika samihafa. Amin'ny C++, ity dia mety ho tanterahina amin'ny alalan'ny fampiasana virtual methods sy inheritance.

class Biby {
public:
    virtual void manaoFeo() const {
        std::cout << "Biby iray manao feo." << std::endl;
    }
};

class Alika : public Biby {
public:
    void manaoFeo() const override {
        std::cout << "Alika manao: Vava!" << std::endl;
    }
};

class Saka : public Biby {
public:
    void manaoFeo() const override {
        std::cout << "Saka manao: Miaou!" << std::endl;
    }
};

int main() {
    Biby* biby1 = new Alika();
    Biby* biby2 = new Saka();

    biby1->manaoFeo();
    biby2->manaoFeo();

    delete biby1;
    delete biby2;
    return 0;
}

Fananganana Overloading

[hanova]

Overloading dia ny fahaizana mametraka anarana mitovy amin'ny fomba na fomba fananganana maromaro ao anaty kilasy iray, fa ny isan'ny parameters na ny karazany no miovaova.

class Calculator {
public:
    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;
    }
};

int main() {
    Calculator calc;
    std::cout << calc.add(5, 3) << std::endl;       // 8
    std::cout << calc.add(5.5, 3.2) << std::endl;   // 8.7
    std::cout << calc.add(1, 2, 3) << std::endl;    // 6
    return 0;
}

Fehiny

[hanova]

Ny C++ dia fiteny malaza sy matanjaka izay manohana ny OOP. Amin'ny alalan'ny fampiasana kilasy, inheritance, polymorphism, ary encapsulation, dia afaka mamorona kaody miorina tsara sy azo amboarina ianao. Ny fahatakarana an'ireto fototra ireto dia zava-dehibe amin'ny fananganana rindranasa C++ matotra sy mahomby.


C++ Maoderina dia manondro ireo fanavaozana natao tamin'ny fiteny C++ nanomboka tamin'ny C++11, izay mitondra endri-javatra vaovao sy fanatsarana ny fiteny. Ity cheatsheet ity dia manome topi-maso momba ireo endri-javatra sy teknika manan-danja amin'ny C++ Maoderina.

Fampidirana Fototra

[hanova]

Ova Auto

[hanova]

Ny auto dia mamela ny compilateur hamantatra ny karazan'ny fanova avy hatrany:

auto isa = 10;  // Ny compilateur dia mamantatra fa int ny isa
auto anarana = "Rakoto";  // Ny compilateur dia mamantatra fa const char* ny anarana

Fandehanana foreach

[hanova]

C++ Maoderina dia manohana ny fandehanana foreach izay mora ampiasaina amin'ny arrays sy containers:

std::vector<int> isa = {1, 2, 3, 4, 5};
for (int i : isa) {
    std::cout << i << std::endl;
}

Lambda Expressions

[hanova]

Ny lambda expressions dia mamela anao hamorona asany tsy misy anarana (anonymous functions):

auto fanampiana = [](int a, int b) {
    return a + b;
};
std::cout << "Valiny: " << fanampiana(5, 3) << std::endl;

constexpr

[hanova]

Ny constexpr dia mamela ny valiny ho fantatra amin'ny fotoana compile-time:

constexpr int roaAvo = 2 * 2;
constexpr int efatraAvo = roaAvo * 2;

Fananganana Zavatra (Object-Oriented Programming)

[hanova]

Kilasy

[hanova]

C++ Maoderina dia mbola manohana tsara ny fomba fananganana zavatra, miaraka amin'ny endri-javatra vaovao toy ny initializer lists:

class Vokatra {
public:
    Vokatra(std::string anarana, double vidiny)
        : anarana(anarana), vidiny(vidiny) {}
    
    void aseho() const {
        std::cout << "Vokatra: " << anarana << ", Vidiny: " << vidiny << std::endl;
    }

private:
    std::string anarana;
    double vidiny;
};

Mpanoro ova marani-tsaina (Smart Pointers)

[hanova]

C++ Maoderina dia mampiditra mpanoro ova marani-tsaina (toy ny std::unique_ptr sy std::shared_ptr) mba hisorohana ny memory leaks:

std::unique_ptr<Vokatra> vokatra = std::make_unique<Vokatra>("Computer", 1200.0);
vokatra->aseho();

Move Semantics

[hanova]

Move semantics dia manatsara ny fampisehoana amin'ny alalan'ny famelana ny angon-drakitra ho "nifindra" fa tsy "adika":

std::vector<int> data = {1, 2, 3, 4};
std::vector<int> dataMoved = std::move(data);  // data dia nifindra amin'ny dataMoved

Templates sy Generic Programming

[hanova]

C++ Maoderina dia manamafy ny fanohanana templates, izay manamora ny fampiasana generic programming:

template<typename T>
T fanampiana(T a, T b) {
    return a + b;
}

int main() {
    std::cout << fanampiana(3, 4) << std::endl;  // Miasa amin'ny ints
    std::cout << fanampiana(3.5, 4.5) << std::endl;  // Miasa amin'ny doubles
    return 0;
}

Variadic Templates

[hanova]

Ny variadic templates dia mamela ny templates hanana isan'ny parameter tsy voafetra:

template<typename... Args>
void aseho(Args... args) {
    (std::cout << ... << args) << std::endl;
}

int main() {
    aseho(1, 2, 3, "Salama", 4.5);
    return 0;
}


Endri-javatra Vaovao amin'ny C++23

[hanova]

Fanamarihana Indrindra ho an'ny C++ Maoderina

[hanova]
  • std::tuple dia ampiasaina hitazona sanda maromaro miaraka.
  • std::optional dia manome fomba hiatrehana sanda mety ho tsy misy.
  • std::chrono dia ampiasaina hiasa amin'ny fotoana sy fotoana lany.

Modules

[hanova]

Ny Modules dia mampihena ny fotoana fandikan-teny sy manatsara ny fitantanana ny loharanom-baovao. Manolo ny #include mahazatra izy ireo mba hisorohana ny fametrahana avo roa heny ny loharanom-baovao.

  • Ohatra:
export module MyModule;

export void hello() {
    std::cout << "Salama, Module!" << std::endl;
}

Mifandray amin'ny Pattern

[hanova]

Ny Pattern Matching dia mamela ny programa hijery ireo soatoavina maro isan-karazany amin'ny alalan'ny endrika iray.

  • Ohatra:
std::variant<int, std::string> v = 42;
std::visit([](auto&& arg) {
    if constexpr (std::is_same_v<decltype(arg), int>)
        std::cout << "Isa: " << arg << std::endl;
    else if constexpr (std::is_same_v<decltype(arg), std::string>)
        std::cout << "Tady: " << arg << std::endl;
}, v);

Ranges

[hanova]

Ny Ranges dia manatsara ny fahafahana miasa amin'ny andiany amin'ny fomba milamina kokoa sy mandaitra kokoa.

  • Ohatra:
#include <ranges>
#include <vector>
#include <iostream>

int main() {
    std::vector<int> numbers = {1, 2, 3, 4, 5};
    auto even = numbers | std::views::filter([](int n) { return n % 2 == 0; });

    for (int n : even) {
        std::cout << n << " ";
    }
}

std::expected

[hanova]

Ny std::expected dia endrika vaovao hanatsarana ny fitantanana ireo vokatra azo amin'ny programa. Izy io dia azo ampiasaina amin'ny famerenana ireo vokatra mety ho tsara na misy hadisoana.

  • Ohatra:
#include <expected>
#include <string>
#include <iostream>

std::expected<int, std::string> parse_int(const std::string& str) {
    try {
        return std::stoi(str);
    } catch (const std::exception& e) {
        return std::unexpected("Diso format: " + str);
    }
}

int main() {
    auto result = parse_int("123a");
    if (result) {
        std::cout << "Vokatra: " << *result << std::endl;
    } else {
        std::cout << "Hadisoana: " << result.error() << std::endl;
    }
}

Fehiny

[hanova]

C++ Maoderina dia manampy endri-javatra vaovao izay manamora ny famoronana kaody mora vakiana sy voalamina tsara. Ny fahaizana ny fototry ny endri-javatra vaovao ireo dia zava-dehibe amin'ny fananganana rindranasa amin'ny fiteny C++.