වඩා හොඳ කියවීමක් සඳහා සංවාදයක ස්වරූපයෙන් මගේ පිළිතුර:
අපට අතථ්ය කාර්යයන් අවශ්ය වන්නේ ඇයි?
බහුමාපකය නිසා.
බහුමාපකය යනු කුමක්ද?
පාදක දර්ශකය ව්යුත්පන්න වර්ගයේ වස්තූන් වෙත යොමු කළ හැකිය.
බහුමාපකයේ මෙම අර්ථ දැක්වීම අථත්ය කාර්යයන් සඳහා අවශ්ය වන්නේ කෙසේද?
හොඳයි, මුල් බැඳීම හරහා .
කලින් බැඳීම යනු කුමක්ද?
C ++ හි මුල් බැඳීම (සම්පාදක-කාල බන්ධනය) යන්නෙන් අදහස් කරන්නේ වැඩසටහන ක්රියාත්මක කිරීමට පෙර ශ්රිත ඇමතුමක් සවි කර ඇති බවයි.
නිසා...?
එබැවින් ඔබ ශ්රිතයක පරාමිතිය ලෙස පාදක වර්ගයක් භාවිතා කරන්නේ නම්, සම්පාදකයා හඳුනා ගන්නේ මූලික අතුරුමුහුණත පමණක් වන අතර, ඔබ එම ශ්රිතය ව්යුත්පන්න පංතිවල තර්ක සමඟ අමතන්නේ නම්, එය කපා දමනු ලැබේ, එය ඔබට සිදුවීමට අවශ්ය දේ නොවේ.
එය අපට සිදුවීමට අවශ්ය දේ නොවේ නම්, මෙය අවසර දෙන්නේ ඇයි?
අපට බහුමාපකය අවශ්ය නිසා!
එවිට බහුමාපකයේ වාසිය කුමක්ද?
ඔබට එක් ශ්රිතයක පරාමිතිය ලෙස මූලික වර්ගයේ දර්ශකයක් භාවිතා කළ හැකි අතර, පසුව ඔබේ වැඩසටහනේ ක්රියාත්මක වන වේලාවේදී, ඔබට කිසිදු ව්යුත්පන්න වර්ග අතුරුමුහුණතක් (උදා: ඔවුන්ගේ සාමාජික ක්රියාකාරකම්) කිසිදු ගැටළුවක් නොමැතිව ප්රවේශ විය හැකිය. පාදක දර්ශකය.
අථත්ය කාර්යයන් සඳහා හොඳ කුමක්දැයි මම තවමත් නොදනිමි ...! මෙය මගේ පළමු ප්රශ්නයයි!
හොඳයි, මෙයට හේතුව ඔබ ඉක්මනින් ඔබේ ප්රශ්නය ඇසූ බැවිනි!
අපට අතථ්ය කාර්යයන් අවශ්ය වන්නේ ඇයි?
වස්තුවක ව්යුත්පන්න පංතියක ලිපිනය සහිත පාදක දර්ශකයක් සහිත ශ්රිතයක් ඔබ හැඳින්වූ බව උපකල්පනය කරන්න. අප ඉහත කතා කළ පරිදි, ධාවන කාලය තුළ, මෙම දර්ශකය අවලංගු වේ, මෙතෙක් එය ඉතා හොඳය, කෙසේ වෙතත්, “අපේ ව්යුත්පන්න පන්තියේ සිට” ක්රමවේදයක් (== සාමාජික ශ්රිතයක්) ක්රියාත්මක කිරීමට අපි බලාපොරොත්තු වෙමු! කෙසේ වෙතත්, එකම ක්රමයක් (එකම ශීර්ෂයක් ඇති) දැනටමත් මූලික පන්තියේ අර්ථ දක්වා ඇත, එබැවින් ඔබේ ක්රමය අනෙක් ක්රමය තෝරා ගැනීමට කරදර විය යුත්තේ ඇයි? වෙනත් වචන වලින් කිවහොත්, සාමාන්යයෙන් පෙර සිදු වූ දේ අප දුටු දෙයින් ඔබ මෙම තත්වය ඉවත් කරන්නේ කෙසේද?
කෙටි පිළිතුර “පාදමේ අතථ්ය සාමාජික ශ්රිතයක්” වන අතර මඳක් දිගු පිළිතුර නම්, “මෙම පියවරේදී, වැඩසටහන මූලික පන්තියේ අථත්ය ශ්රිතයක් දුටුවහොත්, ඔබ භාවිතා කිරීමට උත්සාහ කරන බව එය දනී (අවබෝධ කර ගනී) බහුමාපකය "සහ ඒ අනුව ව්යුත්පන්න පංතිවලට ( v-table භාවිතා කිරීම, ප්රමාද බන්ධන ආකාරයක් භාවිතා කිරීම) එකම ශීර්ෂයක් සහිත වෙනත් ක්රමයක් සොයා ගැනීමට , නමුත් අනපේක්ෂිත ලෙස වෙනස් ක්රියාත්මක කිරීමක් සොයා ගැනීමට.
වෙනස් ක්රියාත්මක කිරීමක් ඇයි?
ඔයා දණ ගහන්න! හොඳ පොතක් කියවන්න !
හරි, රැඳී සිටින්න රැඳී සිටින්න, ඔහුට / ඇයට සරලවම ව්යුත්පන්න ආකාරයේ දර්ශක භාවිතා කළ හැකි විට, මූලික දර්ශක භාවිතා කිරීමට යමෙක් කරදර වන්නේ ඇයි? ඔබ විනිශ්චයකරු වන්න, මේ සියලු හිසරදය වටී ද? මෙම කොටස් දෙක දෙස බලන්න:
// 1:
Parent* p1 = &boy;
p1 -> task();
Parent* p2 = &girl;
p2 -> task();
// 2:
Boy* p1 = &boy;
p1 -> task();
Girl* p2 = &girl;
p2 -> task();
හරි, 1 තවමත් 2 ට වඩා හොඳ යැයි මම සිතුවත් , ඔබට මේ ආකාරයට 1 ක් ලිවිය හැකිය:
// 1:
Parent* p1 = &boy;
p1 -> task();
p1 = &girl;
p1 -> task();
එපමණක් නොව, මෙය මා මෙතෙක් ඔබට පැහැදිලි කර ඇති සියලු දේවල ව්යාජ භාවිතයක් පමණක් බව ඔබ දැන සිටිය යුතුය. මේ වෙනුවට, උදාහරණයක් ලෙස ඔබේ වැඩසටහනේ එක් එක් ව්යුත්පන්න පංති වලින් ක්රම භාවිතා කළ ශ්රිතයක් ඇති බව උපකල්පනය කරන්න (getMonthBenefit ()):
double totalMonthBenefit = 0;
std::vector<CentralShop*> mainShop = { &shop1, &shop2, &shop3, &shop4, &shop5, &shop6};
for(CentralShop* x : mainShop){
totalMonthBenefit += x -> getMonthBenefit();
}
දැන්, හිසරදයක් නොමැතිව මෙය නැවත ලිවීමට උත්සාහ කරන්න !
double totalMonthBenefit=0;
Shop1* branch1 = &shop1;
Shop2* branch2 = &shop2;
Shop3* branch3 = &shop3;
Shop4* branch4 = &shop4;
Shop5* branch5 = &shop5;
Shop6* branch6 = &shop6;
totalMonthBenefit += branch1 -> getMonthBenefit();
totalMonthBenefit += branch2 -> getMonthBenefit();
totalMonthBenefit += branch3 -> getMonthBenefit();
totalMonthBenefit += branch4 -> getMonthBenefit();
totalMonthBenefit += branch5 -> getMonthBenefit();
totalMonthBenefit += branch6 -> getMonthBenefit();
ඇත්ත වශයෙන්ම, මෙය තව දුරටත් උපක්රමශීලී උදාහරණයක් විය හැකිය!