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++.