Ireo fahadisoana mahazatra amin'ny fandaharana C++ sy ny fomba fanamboarana azy ireo

Fahadisoana mahazatra amin'ny fandaharana C++ sy ny fomba fanamboarana azy ireo

Ny fandaharana C++ dia iray amin'ireo fiteny fandaharana mahery vaika sy mora ampiasaina indrindra. Noho ny fahafahany manohana fandaharana ara-dalàna, mifantoka amin'ny zavatra, ary ankapobeny, ny C++ dia ampiasaina betsaka amin'ny fampiharana isan-karazany, manomboka amin'ny rafitra fiasana ka hatramin'ny fampiharana lalao avo lenta. Na izany aza, toy ny fiteny fandaharana rehetra, ny C++ dia manana lesoka mahazatra maromaro izay matetika hitan'ny mpamorona, na vaovao na efa za-draharaha. Ity lahatsoratra ity dia hiresaka momba ny lesoka mahazatra sasany amin'ny fandaharana C++ ary hanome torolàlana momba ny fomba fanamboarana azy ireo.

1. Fampiasana ireo "Unintialized Pointers"

Hadisoana:
Mety hanondro toerana tsy fantatra ny pointer tsy voasokajy, ka hiteraka fihetsika tsy ampoizina na fianjeran'ny programa. Ohatra iray amin'ity hadisoana ity ny:

“`cpp
int ptr; // tsy voapetraka ny ptr
ptr = 10; // Hadisoana: tsy voapetraka ny pointer
""

Ahoana no fanamboarana:
Ampandehano ny pointer alohan'ny hampiasana azy. Azonao atao ny manomboka azy amin'ny `nullptr` na amin'ny adiresy fahatsiarovana manan-kery.

“`cpp
int ptr = nullptr; // Manomboka amin'ny nullptr
int sanda = 10;
ptr = &value;
ptr = 20; // Azo antoka izao
""

2. Fahadisoana eo amin'ny fitantanana ny fahatsiarovana (Fahatsiarovana miparitaka)

Hadisoana:
Mitranga ny fivoahan'ny fahatsiarovana rehefa tsy averina avoaka ny fahatsiarovana nomena. Mety hahatonga ny fampiharana hampiasa fahatsiarovana bebe kokoa rehefa mandeha ny fotoana izany, ka mety hiteraka tsy fahampian'ny fahatsiarovana.

“`cpp
int ptr = int[10] vaovao;
// Adino ny mamafa ny fahatsiarovana nomena
""

Ahoana no fanamboarana:
Ataovy izay hahazoana antoka fa afaka manafaka ny fitadidiana natokana amin'ny fampiasana ny `delete` na `delete[]` arakaraka izay nampiasaina hanomezana azy.

“`cpp
int ptr = int[10] vaovao;
// Fampiasana fahatsiarovana…
delete[] ptr; // Fahatsiarovana malalaka natokana
""

Mampiasà tranomboky "smart pointers" (toy ny `std::unique_ptr` na `std::shared_ptr`) mba hanamorana ny fitantanana ny fahatsiarovana.

“`cpp
Anisan'izany

std::unique_ptr ptr(int[10] vaovao);
// Hivoaka ho azy ny fahatsiarovana rehefa miala amin'ny sehatry ny ptr
""

3. Fahadisoana amin'ny fampiasana referansa

Hadisoana:
Ny famerenana referansa na pointer mankany amin'ny variable eo an-toerana izay tsy tafiditra ao anatin'ny sehatry ny asa dia mety hiteraka fihetsika tsy ampoizina.

“`cpp
int& getReference() {
int sanda = 10;
sanda miverina; // Hadisoana: mamerina referansa mankany amin'ny variable eo an-toerana
}
""

Ahoana no fanamboarana:
Fadio ny mamerina referansa amin'ny variables eo an-toerana. Aleo kosa mampiasa variables static, na tsara kokoa aza, mamerina sanda, na diniho ny fampiasana objects.

“`cpp
int getValue() {
int sanda = 10;
sanda miverina; // Azo antoka kokoa
}
""

4. Aza raharahiana ireo hafatra diso sy fampitandremana avy amin'ny Compiler

Hadisoana:
Matetika ireo mpandrindra fandaharana dia tsy miraharaha ireo hafatra diso sy fampitandremana navoakan'ny mpamorona programa, na dia manome fampahalalana manan-danja momba ny mety ho fahadisoana aza ireo hafatra ireo.

Ahoana no fanamboarana:
Hamarino tsara sy fantaro tsara foana ireo hafatra diso sy fampitandremana vokarin'ny "compiler". Ampiasao ireo fampitandremana avo lenta mba hahazoana antoka fa madio kokoa ny kaody.

Ohatra ao amin'ny GCC, ampiasao ny saina `-Wall` mba hamoronana fampitandremana bebe kokoa.

“`bash
g++ -Wall -o fandaharana main.cpp
""

5. Fahadisoana amin'ny Be loatra ny enta-mavesatry ny mpandraharaha

Hadisoana:
Ny fampiasana tafahoatra tafahoatra ataon'ny mpampiasa dia mety hiteraka fihetsika tsy ampoizina na fahadisoana amin'ny fotoana fiasana.

“`cpp
kilasy MyClass {
ampahibemaso:
angon-drakitra int;
Operator MyClass+ (const MyClass& hafa) {
mamerina angona + other.data; // Hadisoana: tokony hamerina ny MyClass
}
};
""

Ahoana no fanamboarana:
Ataovy azo antoka fa mamerina ny karazana mety ny mpandraharaha overloaded ary miaro ny invariants an'ny kilasy.

“`cpp
kilasy MyClass {
ampahibemaso:
angon-drakitra int;
Operator MyClass+ (const MyClass& hafa) {
Vokatra avy amin'ny MyClass;
valiny.data = data + other.data;
mamerina valiny; // Mamerina zavatra avy amin'ny MyClass
}
};
""

6. Fampiasana diso ny Macros

Hadisoana:
Indraindray dia ampiasaina tafahoatra na tsy araka ny tokony ho izy ny macros, izay mety hiteraka lesoka sarotra hita mandritra ny runtime.

“`cpp
mamaritra ny EKITRA(x) xx

int valiny = SQUARE(5 + 1); // Hadisoana: ny valiny dia 5 + 1 5 + 1
""

Ahoana no fanamboarana:
Soloy amin'ny fanehoan-kevitra na môdely tsy miovaova ny macros mba hahazoana fiarovana sy fanaraha-maso tsara kokoa ny karazana.

“`cpp
môdely
T-kianja(T x) {
avereno xx;
}

int valiny = square(5 + 1); // Azo antoka ampiasaina
""

7. Fampiasana diso ny asa C-style

Hadisoana:
Mampiasa fiasa C-style toy ny `strcpy` na `sprintf` izay mora iharan'ny buffer overflow.

“`cpp
char src[] = "Manahoana, ry Tontolo!";
char dest[5];
strcpy(dest, src); // Hadisoana: mihoatra ny buffer
""

Ahoana no fanamboarana:
Ampiasao ireo fiasa C++ azo antoka kokoa toy ny `std::string` na `std::vector`.

“`cpp
Anisan'izany
std::string src = “Manahoana, ry Tontolo!”;
std::string dest = src;
""

8. Tsy miraharaha ny famantarana ny fahadisoana

Hadisoana:
Aza raharahiana ny fanamarinana ny lesoka amin'ny fiasan'ny I/O na ireo fiasa mety tsy hahomby.

“`cpp
std::ifstream rakitra("data.txt");
// Hadisoana: tsy nanamarina raha voasokatra soa aman-tsara ny rakitra
""

Ahoana no fanamboarana:
Hamarino tsara foana raha nahomby ny fandidiana ary karakarao araka ny tokony ho izy ny lesoka.

“`cpp
std::ifstream rakitra("data.txt");
raha (!rakitra) {
std::cerr << “Tsy nahavita nanokatra rakitra” << std::endl;
return 1;
}
""

9. Fampiharana ny "Loop" tsy dia tsara loatra

Hadisoana:
Ny fampiasana tadivavarana tsy dia tsara dia mety hiteraka fihenan'ny fahombiazan'ny programa.

“`cpp
ho an'ny (int i = 0; i < vec.size(); i++) {
// Dingana miaraka amin'ny vec[i]
// Hadisoana: size() nantsoina isaky ny famerenana
}
""

Ahoana no fanamboarana:
Amboary ny fihodinana amin'ny alàlan'ny fampihenana ny antso miverimberina amin'ny asa.

“`cpp
ho an'ny (std::size_t i = 0, n = vec.size(); i < n; i++) {
// Dingana miaraka amin'ny vec[i]
}
""

Araraoty ihany koa ireo algorithm STL toy ny `std::for_each` ho an'ny fanatsarana bebe kokoa.

“`cpp
Anisan'izany
std::for_each(vec.begin(), vec.end(), [](int &value) {
// Dingana misy sandany
});
""

10. Fahadisoana amin'ny fikirakirana kofehy

Hadisoana:
Ny tsy fahaizana mitantana ny kofehy dia mety hiteraka olana amin'ny hazakazaka na fifandirana.

“`cpp
ampidiro ny void run() {
// Hadisoana: Mety hitranga ny toe-javatra misy amin'ny hazakazaka
}

std::thread t1(mihazakazaka);
std::thread t2(mihazakazaka);
""

Ahoana no fanamboarana:
Ampiasao ireo fomba fiasa "synchronization primitives" toy ny mutexes mba hisorohana ny fifanolanana sy ny tsy fifandanjana eo amin'ny hazakazaka.

“`cpp
ampidiro

std::mutex mtx;

void run() {
std::lock_guard lock(mtx);
// Dingana iray izay azo antoka amin'ny toe-javatra misy amin'ny hazakazaka
}

std::thread t1(mihazakazaka);
std::thread t2(mihazakazaka);

t1.join();
t2.join();
""

Famaranana

Fiteny fandaharana mahery vaika sy mora ampiasaina ny C++, saingy mora iharan'ny lesoka mahazatra ihany koa, indrindra mifandraika amin'ny fitantanana ny fahatsiarovana sy ny pointer. Amin'ny fahatakarana ireo lesoka ireo sy ny fahafantarana ny fomba fanamboarana azy ireo, dia afaka mamorona fampiharana azo itokisana sy mahomby kokoa ianao. Tsarovy ny mitandrina hatrany amin'ny hafatra avy amin'ny compiler, mampiasa fitaovana maoderina izay manampy anao hanoratra kaody azo antoka , ary manatsara hatrany ny fahaizanao amin'ny fahatakarana sy fampiharana ny fomba fanao tsara indrindra amin'ny fandaharana C++.

Mametraha hevitra