Mearachdan cumanta ann am prògramadh C ++ agus mar a chuireas tu ceart iad

Mearachdan Cumanta ann am Prògramadh C ++ agus Mar a chuireas tu ceart iad

’S e prògramadh C++ aon de na cànanan prògramaidh as cumhachdaiche agus as sùbailte. Leis a’ chomas aige taic a thoirt do phrògramadh modhan-obrach, stèidhichte air nithean, agus coitcheann, tha C++ air a chleachdadh gu farsaing ann an raon farsaing de thagraidhean, bho shiostaman obrachaidh gu tagraidhean geama àrd-choileanaidh. Ach, mar chànan prògramaidh sam bith, tha grunn mhearachdan cumanta aig C++ cuideachd a bhios luchd-leasachaidh, an dà chuid ùr agus eòlach, a’ tighinn tarsainn orra gu tric. Bruidhnidh an t-artaigil seo air cuid de mhearachdan cumanta ann am prògramadh C++ agus bheir e stiùireadh air mar a chuireas tu ceart iad.

1. A’ cleachdadh chomharran neo-thòisichte

Mearachd:
Faodaidh comharraiche neo-thòisichte comharrachadh gu àite cuimhne neo-aithnichte, ag adhbhrachadh giùlan ris nach robh dùil no tubaist prògraim. Seo eisimpleir den mhearachd seo:

“`cpp
int ptr; // chan eil ptr air a thòiseachadh
ptr = 10; // Mearachd: cha deach an comharraiche a thòiseachadh
“`

Mar a chuireas tu ceart e:
Tòisich am puingear mus cleachd thu e. Faodaidh tu a thòiseachadh le `nullptr` no le seòladh cuimhne dligheach.

“`cpp
int ptr = nullptr; // Tòisich le nullptr
luach iomlan = 10;
ptr = &luach;
ptr = 20; // A-nis sàbhailte
“`

2. Mearachdan ann an Riaghladh Cuimhne (Aodion Cuimhne)

Mearachd:
Bidh aodion cuimhne a’ tachairt nuair nach tèid cuimhne a chaidh a riarachadh ath-sgaoileadh. Faodaidh seo adhbhrachadh gum bi aplacaid a’ cleachdadh barrachd is barrachd cuimhne thar ùine, agus mu dheireadh a’ leantainn gu gainnead cuimhne.

“`cpp
int ptr = int ùr[10];
// Dìochuimhnich cuimhne a chaidh a riarachadh a dhubhadh às
“`

Mar a chuireas tu ceart e:
Dèan cinnteach an-còmhnaidh gun saor thu cuimhne a chaidh a riarachadh le bhith a’ cleachdadh `delete` no `delete[]` a rèir dè a chaidh a chleachdadh gus a riarachadh.

“`cpp
int ptr = int ùr[10];
// Cleachdadh cuimhne…
cuir às[] ptr; // Saor cuimhne air a riarachadh
“`

Cleachd leabharlann chomharran snasail (leithid `std::unique_ptr` no `std::shared_ptr`) gus riaghladh cuimhne a dhèanamh nas fhasa.

“`cpp
gabhail a-steach

std::unique_ptr ptr(int ùr[10]);
// Thèid cuimhne a leigeil ma sgaoil gu fèin-ghluasadach nuair a dh’fhàgas ptr an raon
“`

3. Mearachdan ann a bhith a’ cleachdadh iomraidhean

Mearachd:
Faodaidh tilleadh iomradh no comharraiche gu caochladair ionadail a tha air a dhol a-mach à raon giùlan ris nach robh dùil adhbhrachadh.

“`cpp
int& faighIomradh() {
luach iomlan = 10;
luach tilleadh; // Mearachd: a’ tilleadh iomradh air caochladair ionadail
}
“`

Mar a chuireas tu ceart e:
Seachain iomraidhean a thilleadh gu caochladairean ionadail. An àite sin, cleachd caochladairean statach, no nas fheàrr fhathast, till luachan, no smaoinich air nithean a chleachdadh.

“`cpp
int faighLuach() {
luach iomlan = 10;
luach tilleadh; // Nas sàbhailte
}
“`

4. Na gabh dragh mu theachdaireachdan mearachd is rabhaidhean an t-siolandair

Mearachd:
Bidh prògramadairean gu tric a’ seachnadh teachdaireachdan mearachd agus rabhaidhean a chuireas an co-chruinneadair a-mach, eadhon ged a bheir na teachdaireachdan sin fiosrachadh cudromach mu mhearachdan a dh’ fhaodadh a bhith ann.

Mar a chuireas tu ceart e:
Thoir sùil an-còmhnaidh air na teachdaireachdan mearachd agus na rabhaidhean a ghineas an co-chruinneadair agus tuig iad. Cuir rabhaidhean àrd-ìre an comas gus dèanamh cinnteach à còd nas glaine.

Mar eisimpleir ann an GCC, cleachd am bratach `-Wall` gus barrachd rabhaidhean a ghineadh.

“`bash
g++ -Balla -o prògram prìomh.cpp
“`

5. Mearachd ann an Cus Luchdadh Obraiche

Mearachd:
Faodaidh cus luchdachadh ceàrr air obraicheadairean giùlan ris nach robh dùil no mearachdan ruith-ùine adhbhrachadh.

“`cpp
clas Mo Chlas {
poblach:
dàta iomlan;
Obraicheadair MoChlas+ (const MoChlas& eile) {
till dàta + eile.dàta; // Mearachd: bu chòir dha MyClass a thilleadh
}
};
“`

Mar a chuireas tu ceart e:
Dèan cinnteach gu bheil an gnìomhaiche cus luchdaichte a’ tilleadh an seòrsa iomchaidh agus a’ gleidheadh ​​neo-atharraichean a’ chlas.

“`cpp
clas Mo Chlas {
poblach:
dàta iomlan;
Obraicheadair MoChlas+ (const MoChlas& eile) {
Toradh MyClass;
dàta.toraidh = dàta + dàta.eile;
till toradh; // A’ tilleadh nì bhon Chlas agam
}
};
“`

6. Droch-chleachdadh Macros

Mearachd:
Uaireannan bidh macros air an cleachdadh cus no gu ceàrr, agus faodaidh seo mearachdan adhbhrachadh a tha duilich an lorg aig àm ruith.

“`cpp
mìnich CEÀRNAG(x) xx

int toradh = CEÀRNAG(5 + 1); // Mearachd: is e an toradh 5 + 1 5 + 1
“`

Mar a chuireas tu ceart e:
Cuir abairtean no teamplaidean cunbhalach an àite macros airson tèarainteachd agus smachd nas fheàrr air seòrsa.

“`cpp
teamplaid
T ceàrnagach(T x) {
tilleadh xx;
}

int toradh = ceàrnag(5 + 1); // Sàbhailte a chleachdadh
“`

7. Droch-chleachdadh Gnìomhan Stoidhle C

Mearachd:
A’ cleachdadh gnìomhan stoidhle C mar `strcpy` no `sprintf` a tha so-leònte ri cus-shruthadh bufair.

“`cpp
char src[] = "Halò, a Shaoghail!";
ceann-uidhe char[5];
strcpy(dest, src); // Mearachd: cus-shruthadh bufair
“`

Mar a chuireas tu ceart e:
Cleachd gnìomhan C++ nas sàbhailte leithid `std::string` no `std::vector`.

“`cpp
gabhail a-steach
std::string src = “Halò, a Shaoghail!”;
std::string ceann-uidhe = src;
“`

8. A’ seachnadh lorg mhearachdan

Mearachd:
Na dèan sgrùdadh mhearachdan air obrachaidhean no gnìomhan I/O a dh’ fhaodadh fàiligeadh.

“`cpp
faidhle std::ifstream(“dàta.txt”);
// Mearachd: cha deach sgrùdadh a dhèanamh an deach am faidhle fhosgladh gu soirbheachail
“`

Mar a chuireas tu ceart e:
Thoir sùil an-còmhnaidh a bheil an obair air a bhith soirbheachail agus dèilig ri mearachdan mar bu chòir.

“`cpp
faidhle std::ifstream(“dàta.txt”);
ma tha (!faidhle) {
std::cerr << “Dh’fhàillig fosgladh faidhle” << std::endl;
tilleadh 1;
}
“`

9. Buileachadh Lùb Neo-iomchaidh

Mearachd:
Faodaidh cleachdadh lùban neo-iomchaidh lùghdachadh a dhèanamh air coileanadh a’ phrògraim.

“`cpp
airson (int i = 0; i < meud.meud(); i++) {
// Pròiseas le vec[i]
// Mearachd: size() air a ghairm air gach ath-aithris
}
“`

Mar a chuireas tu ceart e:
Leasaich lùban le bhith a’ lughdachadh ghairmean gnìomh a-rithist is a-rithist.

“`cpp
airson (std::size_t i = 0, n = vec.size(); i < n; i++) {
// Pròiseas le vec[i]
}
“`

Gabh brath cuideachd air algairim STL mar `std::for_each` airson tuilleadh leasachaidh.

“`cpp
gabhail a-steach
std::airson_gach(vec.begin(), vec.end(), [](int &luach) {
// Pròiseas le luach
});
“`

10. Mearachd ann an làimhseachadh nan snàthan

Mearachd:
Faodaidh droch làimhseachadh snàithleanan leantainn gu suidheachaidhean rèis no bacadh.

“`cpp
cuir a-steach ruith falamh () {
// Mearachd: Dh’fhaodadh suidheachadh rèis tachairt
}

std::snàthainn t1(ruith);
std::snàthainn t2(ruith);
“`

Mar a chuireas tu ceart e:
Cleachd prìomhaidean sioncronachaidh leithid mutexes gus casg a chur air suidheachaidhean rèis agus glasan-stad.

“`cpp
cuir a-steach cuir a-steach

std::mutex mtx;

ruith falamh() {
std::glas_dìon glas(mtx);
// Pròiseas a tha sàbhailte bho chumhaichean rèis
}

std::snàthainn t1(ruith);
std::snàthainn t2(ruith);

t1.join();
t2.join();
“`

Co-dhùnadh

’S e cànan prògramaidh cumhachdach is sùbailte a th’ ann an C++, ach tha e cuideachd buailteach do mhearachdan cumanta, gu sònraichte a thaobh riaghladh cuimhne is puingearan. Le bhith a’ tuigsinn nan mearachdan sin agus fios agad mar a chuireas tu ceart iad, faodaidh tu tagraidhean nas earbsaiche agus nas èifeachdaiche a leasachadh . Cuimhnich gun toir thu aire an-còmhnaidh do theachdaireachdan an co-chruinneachaidh, gun cleachd thu innealan ùr-nodha a chuidicheas tu gus còd sàbhailte a sgrìobhadh , agus gun leasaich thu do sgilean ann a bhith a’ tuigsinn agus a’ cur an sàs deagh chleachdaidhean prògramaidh C++.

Fàg beachd