C++
Fampidirana ny C++ sy ny OOP
hanovaC++ 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
hanovaNy 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)
hanovaNy 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)
hanovaEncapsulation 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)
hanovaNy 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
hanovaPolymorphism 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
hanovaOverloading 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
hanovaNy 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
hanovaOva Auto
hanovaNy 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
hanovaC++ 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
hanovaNy 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
hanovaNy 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)
hanovaKilasy
hanovaC++ 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)
hanovaC++ 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
hanovaMove 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
hanovaC++ 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
hanovaNy 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
hanovaFanamarihana 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
hanovaNy 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
hanovaNy 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
hanovaNy 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
hanovaNy 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
hanovaC++ 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++.