ඔබ C ++ හි ව්‍යුහයකට එදිරිව පන්තියක් භාවිතා කළ යුත්තේ කවදාද?


982

C ++ හි structvs a භාවිතා කිරීම වඩා හොඳ කුමන අවස්ථා classවලදීද?


51
මෙය C ++ ට පමණක් අදාළ නොවේ, නමුත් ව්‍යුහයන් සහ පන්ති යන දෙකම සපයන ඕනෑම භාෂාවකට.
ජේසන් බන්ටිං

3
මම තවමත් එකඟ නොවෙමි - මම මෙම ප්‍රශ්නයට අර්ථ නිරූපණය කරමි. සමහර විට තාක්ෂණික වෙනස්කම් තිබිය හැකි නමුත් අර්ථාන්විතව ඒවා එසේ නොවේ. වටිනාකම් වර්ග නිර්මාණය කිරීම සඳහා ව්‍යුහයන් සැබවින්ම ප්‍රයෝජනවත් වේ, පන්ති එසේ නොවේ.
ජේසන් බන්ටිං

5
C ++ හි structs භාවිතා කිරීමට බරපතල හේතුවක් නොමැති බව මම විශ්වාස කරමි. මට නම් ව්‍යුහයන් යනු සී ++ හි තවත් අතිරික්ත “අංගයක්” වන අතර එය ටයිප්ඩෙෆ් වැනි සී සමඟ අනුකූලතාව සඳහා පමණි. C ++ මුලින් C හි දිගුවක් ලෙස නොසැලකූ අතර ජාවා වැනි මුල සිටම නිර්මාණය කර ඇත්නම් මේවා නොපවතී. පොදුවේ ගත් කල, C ++ පිළිබඳ අමුතුම දේ බොහෝමයක් C අනුකූලතාවයට සම්බන්ධ බව මට පෙනී ගියේය.
කොස්තාස්

5
ව්‍යුහය - POD සඳහා (සරල පැරණි දත්ත) සහ සියලුම සාමාජිකයින්ට ප්‍රවේශවීමේ හැකියාව පොදු වේ. පංතිය - ඔබට වඩා හොඳ සංවර්‍ධනයක් අවශ්‍ය වූ විට සහ පන්තියේ තත්වය සමඟ වැඩ කිරීමට සාමාජික ක්‍රියාකාරකම් අවශ්‍ය වූ විට.
නවනීත් කේඑන්

4
මෙය සත්‍ය වන්නේ සම්මුතියෙන් පමණි. පෙරනිමි සංසරණය හැරුණු විට කිසිදු වෙනසක් නැත.
ඩේව් හිලියර්

Answers:


830

C ++ හි a classසහ a අතර ඇති වෙනස්කම් structනම්, ව්‍යුහයන්ට පෙරනිමි publicසාමාජිකයන් සහ භෂ්ම සහ පංතිවල පෙරනිමි privateසාමාජිකයන් සහ පදනම් ඇත. පන්ති හා structs දෙකම මිශ්ර කළ හැකි public, protectedසහ private, සාමාජික උරුමය භාවිතා කළ හැකි හා සාමාජික කටයුතු කර ගත හැක.

පංති වැනි ලක්ෂණ නොමැතිව සරල-පැරණි-දත්ත ව්‍යුහයන් ලෙස ව්‍යුහයන් භාවිතා privateකිරීම සහ දත්ත සහ සාමාජික ක්‍රියාකාරකම් සහිත සමස්ත දත්ත ව්‍යුහයන් ලෙස පන්ති භාවිතා කිරීම මම නිර්දේශ කරමි .


103
නවීකරණයක් හෝ ක්‍රමවේදයක් නොමැති ව්‍යුහයක් POD struct ලෙස හැඳින්වේ, එය C පුස්තකාල සමඟ පසුගාමී අනුකූල අතුරු මුහුණතක් ලෙස පවතින අතර එය C ව්‍යුහයක් ලෙස සැකසීමට (යැයි කියනු ලැබේ). මෙම එක් ව්‍යතිරේකය හැරුණු විට, එකම වෙනස සඳහන් කර ඇත.
workmad3

26
@ workmad3: නම නොමඟ යවන නමුත් 9/4 (C ++ 03) මෙසේ කියයි: “POD-struct යනු සමස්ත පන්තියක් වන අතර එය POD නොවන, POD නොවන, POD නොවන සංගමයේ ස්ථිතික නොවන දත්ත සාමාජිකයන් නොමැත. (හෝ එවැනි වර්ගවල පෙළක්) හෝ යොමු කිරීමක් වන අතර පරිශීලක-නිර්වචනය කරන ලද පිටපත් පැවරුම් ක්‍රියාකරුවෙකු සහ පරිශීලක-නිර්වචනය කළ විනාශ කරන්නෙකු නොමැත. “Struct” පන්තියේ යතුර භාවිතා කිරීම සඳහා කිසිදු සීමාවක් නොමැති අතර “පොදු” භාවිතා කිරීම සඳහා කිසිදු සීමාවක් නොමැත (සමස්ත අවශ්‍යතා සඳහා 8.5.1 / 1 බලන්න). මෙය "struct" සහ "පන්තිය" අතර වෙනසක් නොවේ.

5
සම්මතයේ අර්ථ දැක්වීම අනුව ඔබ "සමස්ත" භාවිතය වරදවා වටහා ගත හැකිය. :)

3
ස්ට්‍රෝස්ට්‍රප්ගේ “මූලධර්ම හා පරිචය” පොතට අනුව: “මූලික වශයෙන් සාමාජිකයින්ට ඕනෑම වටිනාකමක් ලබා ගත හැකි තැන ව්‍යුහයන් භාවිතා කළ යුතුය” (එනම් අර්ථවත් පන්ති වෙනස් කිරීමක් නිර්වචනය කළ නොහැකි තැන)
ප්‍රතිදේහ

6
සී සමඟ අන්තර් සම්බන්ධ වන විට ඇත්ත වශයෙන්ම ඔබට පන්ති භාවිතා කළ හැකිය. පන්ති සහ ව්‍යුහ අතර වෙනසක් නැත. ව්‍යුහයන් පන්ති ය; පෙරනිමි ප්‍රවේශය පමණක් පුද්ගලික සිට පොදු වෙත මාරු වේ.
සෙබස්තියන් මැක්

239

අනෙක් සියල්ලන්ම සටහන් කර ඇති පරිදි ඇත්ත වශයෙන්ම ඇත්තේ භාෂා වෙනස්කම් දෙකක් පමණි:

  • structපෙරනිමි පොදු ප්‍රවේශයට සහ classපෙරනිමි පුද්ගලික ප්‍රවේශයට.
  • උරුම විට, structපෙර සැකසුම publicඋරුමයක් හා classපෙරනිමි privateඋරුමය. (හාස්‍යයට කරුණක් නම්, C ++ හි ඇති බොහෝ දේ මෙන් පෙරනිමිය පසුපසට ය: publicඋරුමය බොහෝ සෙයින් පොදු තේරීම වේ, නමුත් මිනිසුන් කලාතුරකින් ප්‍රකාශ structකරන්නේ “ public” මූල පදය ටයිප් කිරීමෙන් ඉතිරි කර ගැනීම සඳහා ය .

නමුත් ප්‍රායෝගිකව සැබෑ වෙනස වන්නේ class/ structඉදිකිරීම්කරුවෙකු / විනාශ කරන්නෙකු ප්‍රකාශයට පත් කරන / නැති අය අතර ය. "සරල-පැරණි-දත්ත" POD වර්ගයට නිශ්චිත සහතික ඇත, ඔබ පන්තියේ ඉදිකිරීම් භාරගත් පසු තවදුරටත් අදාළ නොවේ. මෙම වෙනස පැහැදිලිව තබා ගැනීම සඳහා, බොහෝ අය හිතාමතාම structPOD වර්ග සඳහා පමණක් භාවිතා කරන අතර, ඔවුන් කිසියම් ක්‍රමයක් එකතු කිරීමට යන්නේ නම්, classes භාවිතා කරන්න . පහත කොටස් දෙක අතර වෙනස වෙනත් ආකාරයකින් අර්ථ විරහිත ය:

class X
{
  public:

  // ...
};

struct X
{
  // ...
};

(අහම්බෙන්, “POD වර්ගය” යන්නෙන් සැබවින්ම අදහස් කරන්නේ කුමක්ද යන්න පිළිබඳ හොඳ පැහැදිලි කිරීම් සහිත නූලක් මෙන්න: C ++ හි POD වර්ග මොනවාද? )


උරුම වෙනස්කම් පිළිබඳ කදිම උදාහරණයක්: මෙහි .
ලිරන් ඔරෙවි

8
ඔබ භාවිතා යන්න structහෝ classඔබගේ වස්තුව Pod හෝ ඔබ පිටපතක් ඉදිකිරීමටත් / destructor අර්ථ යුතු ද යන්න යන්න මත කිසිදු ආකාරයකින්. සාමාජික කාර්යයන් ද POD වීම කෙරෙහි කිසිදු බලපෑමක් ඇති නොකරයි. ඔබ ලියා ඇති දේ මම නැවත කියවන විට, ඔබ වෙනත් ආකාරයකින් යෝජනා නොකරන බව මට පෙනේ, නමුත් වර්තමාන වචන අවුල් සහගතය
ඩේවිඩ් ස්ටෝන්

1
Av ඩේවිඩ්ස්ටෝන් මූලික වශයෙන්, POD ව්‍යුහයන් පසුපසට-සී කේතයට අනුකූල වන බවට සහතික විය යුතු අතර, එබැවින් මූලික වශයෙන් එය නිර්මාණය කර ඇත්තේ සී-ශෛලීය ව්‍යුහයන් ලෙස ය.
ජස්ටින් වේලාව - මොනිකා නැවත

3
මෙම පිළිතුරේ "සැබෑ වෙනස" කොටස මුළුමනින්ම වැරදිය.
juanchopanza

192

පවතින පිළිතුරු වල වැරදි වැටහීම් රාශියක් ඇත.

දෙකම classසහ structපංතියක් ප්රකාශ කරන්න.

ඔව්, පංතිය ප්‍රකාශ කිරීම සඳහා ඔබ භාවිතා කළ ප්‍රධාන පදය මත පදනම්ව, පන්ති අර්ථ දැක්වීම තුළ ඔබේ ප්‍රවේශ වෙනස් කිරීමේ මූල පද නැවත සකස් කිරීමට ඔබට සිදු විය හැකිය.

එහෙත්, වාක්‍ය ඛණ්ඩයෙන් ඔබ්බට එකක් තෝරා ගැනීමට ඇති එකම හේතුව සම්මුතිය / විලාසය / මනාපයයි.

structසාමාජික ක්‍රියාකාරිත්වයකින් තොරව පන්ති සඳහා මූල පදය සමඟ සම්බන්ධ වීමට සමහර අය කැමතියි , මන්ද එහි ප්‍රති ing ලයක් ලෙස අර්ථ දැක්වීම සී වෙතින් සරල ව්‍යුහයක් "පෙනේ".

ඒ හා සමානව, සමහර අය classසාමාජික ක්‍රියාකාරකම් සහ privateදත්ත සහිත පන්ති සඳහා මූල පදය භාවිතා කිරීමට කැමතියි , මන්ද එය “පන්තිය” යැයි පවසන අතර එම නිසා වස්තු-නැඹුරු වැඩසටහන්කරණය පිළිබඳ ඔවුන්ගේ ප්‍රියතම පොතෙන් උදාහරණ ලෙස පෙනේ.

යථාර්ථය නම් මෙය සම්පූර්ණයෙන්ම ඔබට සහ ඔබේ කණ්ඩායමට පැවරී ඇති අතර එය ඔබේ වැඩසටහනට කිසිදු වෙනසක් නොකරනු ඇත.

පහත දැක්වෙන පංති දෙක ඔවුන්ගේ නම හැර සෑම ආකාරයකින්ම නියත වශයෙන්ම සමාන වේ:

struct Foo
{
   int x;
};

class Bar
{
public:
   int x;
};

නැවත ප්‍රකාශ කිරීමේදී ඔබට මූලික වචන මාරු කළ හැකිය:

class Foo;
struct Bar;

( මෙය අනුකූල නොවන නිසා දෘශ්‍ය ස්ටුඩියෝ ගොඩනැගීම බිඳ දැමුවද, ඔබ මෙය කරන විට සම්පාදකයා අනතුරු ඇඟවීමක් කරයි.)

සහ පහත දැක්වෙන ප්‍රකාශන දෙකම සත්‍ය ලෙස තක්සේරු කරයි:

std::is_class<Foo>::value
std::is_class<Bar>::value

කෙසේ වෙතත්, නැවත අර්ථ දැක්වීමේදී ඔබට මූලික වචන මාරු කළ නොහැකි බව සලකන්න . එයට හේතුව (එක්-අර්ථ දැක්වීමේ රීතියට අනුව) පරිවර්තන ඒකක හරහා අනුපිටපත් පන්ති අර්ථ දැක්වීම් “එකම ටෝකන අනුක්‍රමයකින් සමන්විත විය යුතුය . මෙයින් අදහස් කරන්නේ ඔබට හුවමාරු const int member;කර ගැනීමට පවා නොහැකි අතර int const member;, classහෝ අර්ථ නිරූපණය සමඟ කිසිදු සම්බන්ධයක් නැති බවයි struct.


17
මෙය ඉතා තොරතුරු සහ අවංකවම මගේ ප්‍රියතම පිළිතුර විය. අනෙක් සියල්ලන්ම ඒවා වෙනම ආයතන ලෙස සලකයි, කබායට යටින් ඇති විට ඒවා සමාන වේ. Arduino පරිසරයේ ව්‍යුහාත්මක අර්ථ දැක්වීමක් cpp පන්තියක් ලෙස සලකන්නේ දැයි මම කල්පනා කරමි.
බෙන්ජමින්

4
En බෙන් ඇත්තෙන්ම එයයි. Arduino සම්පාදකයා C ++ සම්පාදනය කරයි; ඒක තමයි අවසානය.
underscore_d

7
එබැවින් මම මෙම අයිතිය තේරුම් ගන්නේ නම්: ඔබේ දෘශ්‍යතා විකරණකාරක පැහැදිලිව පෙනෙන තාක් කල්, අතහැර දමා නැත, එය වැදගත් නොවේ. ඔබට ව්‍යුහයන් හැර වෙනත් කිසිවක් භාවිතා නොකර විශාල C ++ යෙදුමක් ලිවිය හැකිය; නැතහොත් ඔබට ව්‍යුහයේ සෑම සිද්ධියක්ම පන්තියට වෙනස් කළ හැකිය. ඔබ සුපුරුදු දෘශ්‍යතාව භාවිතා නොකරන තාක් කල්, යෙදුම් හරියටම සමාන වේ.
රයන් ලුන්ඩි

සී ++ වැඩසටහනක එක් පරිවර්තන ඒකකයකට සම්පූර්ණ ප්‍රකාශයක් ලබා class foo { public: ... };ගත හැකි බවත් struct foo { ... };, “නියත වශයෙන්ම සමාන” හිමිකම් පෑමකට අනුව සත්‍යය පවත්වා ගත යුතු තවත් එකක් තිබිය හැකි බවත් මට විශ්වාස නැත. අසම්පූර්ණ ප්‍රකාශ struct foo;සහ class foo;එකිනෙකට හුවමාරු විය හැකි බවට එය හේතු වේ. මේවා පන්ති ශරීරය නියම නොකරයි, එබැවින් ඒවා ප්‍රවේශ පිරිසැලසුමට කිසිවක් කථා නොකරයි.
කාස්

Az කස්: ඔබ හරි - අර්ථ දැක්වීම් වචනාර්ථයෙන් එකම වර්ගයට නම්, හැසිරීම මනාව අර්ථ දැක්වීමට ඒවා ශබ්දකෝෂයට සමාන විය යුතුය. මෙම struct-ප්රධාන හා පන්ති ප්රධාන එසේ තර්කානුකූලව (මෙම semantics බලපෑමක් නැහැ කොහෙද) නමුත් හුවමාරු වන අතර, Fooසහ Barතවමත් සමාන / සමාන වර්ග වේ. මම "නැවත ප්‍රකාශ කරන විට " කීමටත් උදාහරණයක් දීමටත් වග බලා ගත්තෙමි . ඒ ගැන සිතා බලන්න, මම යූබී
කක්ෂයේ සැහැල්ලු ධාවන පථයට

55

මම පන්තියක් වෙනුවට ව්‍යුහයක් භාවිතා කරන එකම අවස්ථාව වන්නේ ක්‍රියාකාරී ඇමතුමක දී එය භාවිතා කිරීමට පෙර විනෝදකාරකයක් ප්‍රකාශයට පත් කිරීම සහ පැහැදිලිකම සඳහා සින්ටැක්ස් අවම කිරීමට අවශ්‍ය වීමයි. උදා:

struct Compare { bool operator() { ... } };
std::sort(collection.begin(), collection.end(), Compare()); 

35
දැන් එය වසර කිහිපයකට පසුව සහ C ++ 11 සියලු ප්‍රධාන සම්පාදකයින්ගේ සහාය ඇතිව ලැම්බඩාස් මෙය වඩාත් සංක්ෂිප්ත කරයි.

38

සිට C ++ නිතර අසන පැන Lite :

ව්‍යුහයක සාමාජිකයන් සහ මූලික පංති පෙරනිමියෙන් පොදු වන අතර පන්තියේදී ඒවා පෙරනිමියෙන් පුද්ගලික වේ. සටහන: පෙරනිමි මත යැපීමට වඩා ඔබේ මූලික පන්ති පැහැදිලිවම පොදු, පෞද්ගලික හෝ ආරක්‍ෂිත කළ යුතුය.

struct සහ පන්තිය වෙනත් ආකාරයකින් ක්‍රියාකාරී ලෙස සමාන වේ.

හරි, ඒ පිරිසිදු තාක්‍ෂණික කථාව ප්‍රමාණවත්. චිත්තවේගීය වශයෙන්, බොහෝ සංවර්ධකයින් පන්තියක් සහ ව්‍යුහයක් අතර ප්‍රබල වෙනසක් කරයි. ව්‍යුහයක් හුදෙක් සංවෘත හෝ ක්‍රියාකාරීත්වයේ ඉතා සුළු ප්‍රමාණයක් සහිත විවෘත බිටු ගොඩක් මෙන් දැනේ. පංතියක් බුද්ධිමත් සේවාවන්, ශක්තිමත් සංසරණ බාධකයක් සහ මනාව නිර්වචනය කළ අතුරු මුහුණතක් සහිත සමාජයේ ජීවත්වන සහ වගකිවයුතු සාමාජිකයෙකු ලෙස හැඟේ. බොහෝ දෙනෙකුට දැනටමත් ඇති අර්ථය එය බැවින්, ඔබට ක්‍රම කිහිපයක් ඇති සහ පොදු දත්ත ඇති පංතියක් තිබේ නම් ඔබ බොහෝ විට ව්‍යුහාත්මක පදය භාවිතා කළ යුතුය (එවැනි දේ හොඳින් සැලසුම් කරන ලද පද්ධතිවල පවතී!), එසේ නොමැතිනම් ඔබ බොහෝ විට පන්තිය භාවිතා කළ යුතුය මූල පදය.


1
ව්‍යුහය සහ පංතිය ක්‍රියාකාරීව එක හා සමාන යැයි ඔවුන් ප්‍රකාශ කරන්නේ මන්දැයි මට නොතේරේ, නමුත් කිසිදු හේතුවක් නොමැතිව සමහර අවස්ථාවල අනෙකට වඩා වැඩි කැමැත්තක්
දක්වන්නැයි කියමින්

4
හේතුව සම්මුතියයි. ඔබ භාවිතා කරන්නේ කුමන එකක්ද යන්න සම්පාදකයාට ප්‍රශ්නයක් නොවේ, නමුත් ඔබේ කේතය දෙස බලන තවත් සංවර්ධකයෙකුට ඔබ අදහස් කළ දේ තේරුම් ගැනීමට පහසු වේලාවක් ඇත.
තල් ප්‍රෙස්මන්

3
etdeetz: සමස්ත තෙවන ඡේදය තර්කානුකූලයි.
කක්ෂයේ සැහැල්ලු ධාවන තරඟ

ඇවැත්නි, 'පැරණි පාසලෙන්' පැමිණීම, ව්‍යුහයකට ක්‍රමවේදයන් සහ උරුමයක් පවා තිබිය හැකි බව මා දැන සිටියේ නැත. කිසිදු ක්‍රමවේදයක් නොමැතිව දත්ත පමණක් භාවිතා කරන විට මම සෑම විටම struct භාවිතා කර ඇති අතර එය සාමාන්‍යයෙන් struct අවශ්‍ය API කේතය සමඟ කටයුතු කරන විට වේ. බහු උරුමය සඳහා ද ව්‍යුහයන්ට සහාය විය හැකිද?
පෝල් මැකාති

22

ව්‍යුහයක් මට ප්‍රයෝජනවත් වූ එක් ස්ථානයක් වන්නේ වෙනත් පද්ධතියකින් ස්ථාවර ආකෘති පණිවිඩ (ඉහත කී අනුක්‍රමික වරාය) ලැබෙන පද්ධතියක් මා සතුව ඇති විටය. ඔබට ඔබේ ක්ෂේත්‍ර නිර්වචනය කරන ව්‍යුහයකට බයිට් ප්‍රවාහය දැමිය හැකි අතර පසුව ක්ෂේත්‍රයන්ට පහසුවෙන් ප්‍රවේශ විය හැකිය.

typedef struct
{
    int messageId;
    int messageCounter;
    int messageData;
} tMessageType;

void processMessage(unsigned char *rawMessage)
{
    tMessageType *messageFields = (tMessageType *)rawMessage;
    printf("MessageId is %d\n", messageFields->messageId);
}

නිසැකවම, ඔබ සී හි කරන දේම මෙයයි, නමුත් පණිවිඩය පන්තියකට විකේතනය කිරීමේ පොදු කාර්යය සාමාන්‍යයෙන් එය වටින්නේ නැති බව මට පෙනී ගියේය.



12
නැතහොත් ඔබට ශ්‍රිතය operator >>ලිවීම වෙනුවට පන්තියක ක්‍රියාත්මක කළ හැකිය processMessage, එමඟින් ඔබේ C ++ නිසි C ++ හා C ට වඩා අඩු පෙනුමක් ලබා දෙනු ඇත
නික් බැස්ටින්

1
එය විවිධ පද්ධති අතර අතේ ගෙන යා නොහැකි බවට අමතරව, මෙය අන්වර්ථ නීති උල්ලං lates නය කරයි, එබැවින් තනි ගෘහ නිර්මාණ ශිල්පයක් තුළ පවා වැඩ කිරීමට සහතික නොවේ.
underscore_d

@underscore_d මෙය ස්වාධීනව වැඩ කළ හැකි වේදිකාවක් (නමුත් සම්පාදකයෙකු නොවේ), නමුත් ඔබ ස්ථාවර බිට්ෆීල්ඩ්ස්, __packed__ව්‍යුහයක් භාවිතා කළ යුතු අතර එන්ඩියන්-දැනුවත්ව ifdef ක්‍රියාත්මක කිරීමක් තිබිය යුතුය (බාහිර දත්ත ප්‍රභවයට ප්‍රතිවිරුද්ධතාව ප්‍රතිවිරුද්ධව පවතින යන්ත්‍රයක ඇණවුම පෙරළීමට ඔබට අවශ්‍යය. සපයයි). එය එතරම් ලස්සන නැත, නමුත් එහා මෙහා ගෙන යා හැකි වේදිකාවල දුරස්ථ පර්යන්ත සඳහා රෙජිස්ටර් ඇසුරුම් කිරීමට / ඉවත් කිරීමට මම පුරුදු වී සිටිමි.
ක්‍රැසික්

1
ac ජැක්වා හහ්, හොඳ කරුණක්. අන්වර්ථකරණය මෙහි ගැටළුවක් නොවනු ඇත, මන්ද එක් දර්ශකයක් charවර්ගයක් වන අතර ඒවා අන්වර්ථකරණයෙන් නිදහස් වේ. කෙසේ වෙතත්, වෙනත් ගැටළුවක් වුවද තවමත් ගැටළුවක් පවතී: char*වෙනත් වර්ගයකට වාත්තු කිරීම, එම ලිපිනයේ දැනටමත් ආරම්භ කර ඇති දෙවන වර්ගයේ කිසියම් වස්තුවක් සැබවින්ම නොතිබුනේ නම්, එය ජීවිත කාලය පුරාම නීති උල්ලං as නය කරන බැවින් යූබී ය. අෆයික්, ගමනාන්ත වර්ගය සුළු වශයෙන් සෑදිය හැකි වුවද, මතකය වෙන් කර තිබීම පමණක් C ++ සඳහා එම මතකය එම වර්ගයට සැලකීමට විධිමත් ලෙස ඉඩ දීමට ප්‍රමාණවත් නොවේ.
underscore_d

20

ඔබ පුස්තකාලයක් ලියන්නේ නම් C ++ හි "struct" භාවිතා කළ හැකි නමුත් API C හෝ C ++ කේතයෙන් ඇමතිය හැකිය. ඔබ සී සහ සී ++ කේත දෙකටම නිරාවරණය වන ව්‍යුහයන් සහ ගෝලීය API කාර්යයන් අඩංගු තනි ශීර්ෂයක් සාදන්න:

// C access Header to a C++ library
#ifdef __cpp
extern "C" {
#endif

// Put your C struct's here
struct foo
{
    ...
};
// NOTE: the typedef is used because C does not automatically generate
// a typedef with the same name as a struct like C++.
typedef struct foo foo;

// Put your C API functions here
void bar(foo *fun);

#ifdef __cpp
}
#endif

එවිට ඔබට C ++ කේතය භාවිතා කර C ++ ගොනුවක ශ්‍රිත තීරුවක් () ලිවිය හැකි අතර එය C වෙතින් ඇමතිය හැකි වන අතර ලෝක දෙකටම ප්‍රකාශිත struct හරහා දත්ත බෙදා ගත හැකිය. සී සහ සී ++ මිශ්‍ර කිරීමේදී ඇත්ත වශයෙන්ම වෙනත් අවවාද තිබේ, නමුත් මෙය සරල උදාහරණයකි.


2
හොඳම සුදුසු පිළිතුර. සී අනුකූලතාව සැබවින්ම වැදගත්ම හේතුවයි. පෙරනිමි ප්‍රවේශය වැනි අනෙකුත් සියලුම දේ එසෝටරික් වේ.
වැලන්ටින් හයිනිට්ස්

17

සෑම කෙනෙකුම පවසන පරිදි, එකම සැබෑ වෙනස වන්නේ පෙරනිමි ප්‍රවේශයයි. සමහර උපකාරක ක්‍රම ක්‍රියාත්මක කළත්, සරල දත්ත පන්තියක් සමඟ කිසිදු ආකාරයක සංවර්‍ධනයක් මට අවශ්‍ය නොවන විට මම විශේෂයෙන් struct භාවිතා කරමි. උදාහරණයක් ලෙස, මට මේ වගේ දෙයක් අවශ්‍ය වූ විට:

struct myvec {
    int x;
    int y;
    int z;

    int length() {return x+y+z;}
};

1
ඔබ "ව්‍යුහය ඉවතට ගත්" බවක් දැනෙන්නේ නැති සමහර සාමාජික ක්‍රියාකාරකම් සහිත ව්‍යුහයකට උදාහරණයක් ලබා දීම සඳහා +1.
einpoklum

10

මගේම ප්‍රශ්නයට පිළිතුරු දීමට (නිර්ලජ්ජිතව), දැනටමත් සඳහන් කර ඇති පරිදි, C ++ හි ඇති එකම වෙනස වන්නේ ප්‍රවේශ වරප්‍රසාදයි.

මම දත්ත ගබඩා කිරීම සඳහා පමණක් ව්‍යුහයක් භාවිතා කිරීමට නැඹුරු වෙමි. දත්ත සමඟ වැඩ කිරීම පහසු කරන්නේ නම් සහායක කාර්යයන් කිහිපයක් ලබා ගැනීමට මම එයට ඉඩ දෙමි. කෙසේ වෙතත් දත්ත වලට ප්‍රවාහ පාලනයක් අවශ්‍ය වූ වහාම (එනම් අභ්‍යන්තර තත්වයක් පවත්වා ගෙන යන හෝ ආරක්ෂා කරන ගැටර්ස් / සෙටර්ස්) හෝ ඕනෑම ප්‍රධාන ක්‍රියාකාරිත්වයක් (මූලික වශයෙන් වඩා වස්තු වැනි) ලබා ගැනීමට පටන් ගත් විට, එය වඩා හොඳ සන්නිවේදනය කිරීමේ අභිප්‍රාය සඳහා පන්තියකට 'උත්ශ්‍රේණිගත' වනු ඇත.


10

භාෂා මායිම් සහ සම්බන්ධක ආකෘති හරහා අතේ ගෙන යා හැකි බැවින්, C ++ ක්‍රියාත්මක කිරීම සමඟ ඔබ C- අනුකූල අතුරු මුහුණතක් සපයන විට ව්‍යුහයන් ( PODs ) වඩාත් පහසු වේ.

එය ඔබට ප්‍රශ්නයක් නොවේ නම්, "පංතිය" වෙනුවට "ව්‍යුහය" භාවිතා කිරීම හොඳ අභිප්‍රාය සන්නිවේදකයෙකු යැයි මම සිතමි (ඉහත සඳහන් කළ පරිදි @ සීරෝ සිග්නල්). ව්‍යුහයන්ට වඩා අනාවැකි කිව හැකි පිටපත් කිරීමේ අර්ථකථන ඇත, එබැවින් ඔබ බාහිර මාධ්‍ය වෙත ලිවීමට හෝ කම්බි හරහා යැවීමට අදහස් කරන දත්ත සඳහා ඒවා ප්‍රයෝජනවත් වේ.

යැපෙන යතුරු ලියනයක පොකුරක් නිරාවරණය කරන ගතිලක්ෂණ සැකිලි වැනි විවිධ මෙට්‍රොප්‍රොග්‍රැමිං කාර්යයන් සඳහා ව්‍යුහයන් ද පහසු ය:

template <typename T> struct type_traits {
  typedef T type;
  typedef T::iterator_type iterator_type;
  ...
};

... නමුත් එය සැබවින්ම struct හි පෙරනිමි ආරක්ෂණ මට්ටම පොදු වීමෙන් වාසි ලබා ගැනීම පමණි ...


1
POD හි නිවැරදි භාවිතය එය නොවේ. ව්‍යුහයක් (හෝ පංතියක්) POD ව්‍යුහයක් විය හැකි අතර (එය පමණක් නම්) එහි POD සාමාජිකයින් පමණක් සිටී.
මාටින් යෝක්

4
"පුරෝකථනය කළ හැකි පිටපත් කිරීමේ අර්ථ නිරූපණය": සමමිතිය පන්තියට සමාන වේ (සහ එකම ගැටළු ඇත (නොගැඹුරු පිටපත)).
මාටින් යෝක්

2
මෙම පෝස්ට් මඟින් ඔබ විශ්වාස කරන්නේ (අහම්බෙන්) සියලු ව්‍යුහයන් PODs බවයි. මෙය කිසිසේත්ම සත්‍ය නොවේ. මිනිසුන් මෙයින් නොමඟ නොයනු ඇතැයි මම බලාපොරොත්තු වෙමි.
මයිකල් ඩෝර්ස්ට්

9

C ++ සඳහා, ව්‍යුහයන් සහ පන්ති අතර බොහෝ වෙනසක් නොමැත. ප්‍රධාන ක්‍රියාකාරී වෙනස නම්, ව්‍යුහයක සාමාජිකයන් පෙරනිමියෙන් පොදු වන අතර පංතිවල පෙරනිමියෙන් ඒවා පුද්ගලික වේ. එසේ නොමැති නම්, භාෂාව සම්බන්ධයෙන් ගත් කල, ඒවා සමාන ය.

එයින් කියැවෙන්නේ, මම C # හි මෙන් C ++ හි ව්‍යුහයන් භාවිතා කිරීමට නැඹුරු වන අතර එය බ්‍රයන් පැවසූ දෙයට සමානය. ව්‍යුහයන් යනු සරල දත්ත බහාලුම් වන අතර දත්ත මත රැඳී සිටීමට අමතරව දත්ත මත ක්‍රියා කිරීමට අවශ්‍ය වස්තු සඳහා පන්ති භාවිතා කරනු ලැබේ.


5

ඒවා එකම දෙයකි. C ++ හි ඉන්ද්‍රජාලයට ස්තූතිවන්ත වන අතර, ව්‍යුහයකට කාර්යයන් රඳවා තබා ගැනීමට, උරුමය භාවිතා කිරීමට, "නව" භාවිතයෙන් නිර්මාණය කළ හැකිය.

එකම ක්‍රියාකාරී වෙනස වන්නේ පන්තියක් ආරම්භ වන්නේ පුද්ගලික ප්‍රවේශ අයිතිවාසිකම් සමඟ වන අතර ව්‍යුහයක් ආරම්භ වන්නේ මහජනයාගෙන් ය. සී සමඟ පසුගාමී අනුකූලතාව පවත්වා ගැනීම මෙයයි.

ප්‍රායෝගිකව, මම සෑම විටම දත්ත දරන්නන් ලෙස සහ පන්ති වස්තු ලෙස භාවිතා කර ඇත.


5

අනෙක් අය පෙන්වා දී ඇති පරිදි

  • පෙරනිමි දෘශ්‍යතාවයට අමතරව දෙකම සමාන වේ
  • ඕනෑම හේතුවක් නිසා එකක් හෝ වෙනත් එකක් භාවිතා කිරීමට බල කිරීමට හේතු තිබිය හැකිය

Stroustrup / Sutter වෙතින් භාවිතා කළ යුත්තේ කවදාද යන්න පිළිබඳ පැහැදිලි නිර්දේශයක් ඇත:

පන්තියට වෙනස්කමක් තිබේ නම් පන්තිය භාවිතා කරන්න; දත්ත සාමාජිකයින්ට ස්වාධීනව වෙනස් විය හැකි නම් struct භාවිතා කරන්න

කෙසේ වෙතත්, ඉදිරියට ප්‍රකාශයට පත් කිරීම wise ානවන්ත නොවන බව මතක තබා ගන්න. පංතියක් ලෙස ( class X;) සහ එය struct ( struct X { ... }) ලෙස අර්ථ දක්වන්න . එය සමහර සම්බන්ධක (උදා: g ++) මත ක්‍රියා කළ හැකි අතර අනෙක් ඒවා මත අසමත් විය හැකිය (උදා: MSVC), එබැවින් ඔබ සංවර්ධක නිරයේ සිටිනු ඇත.


ඔබට මෙම සම්බන්ධක ගැටළු විස්තර කළ හැකිද?
කක්ෂයේ සැහැල්ලු ධාවන තරඟ

අවාසනාවකට මට ලයිට්නස් රේසින් ඕර්බිට් කරන්න බැහැ. මට උදාහරණයක් නිර්මාණය කිරීමට පවා හැකියාවක් නැත. සුළු කාරණය class Foo; struct Foo { void bar() {} }; int main() { Foo().bar(); }MSVC 2017 සමඟ සම්පාදනය කර ධාවනය කරනවා පමණක් නොව, එය පැහැදිලි අනතුරු ඇඟවීමක් පවා Fooප්‍රකාශයට පත් කළ structනමුත් එය අර්ථ දක්වා ඇත class. නමුත් මට පැහැදිලිවම මතකයි ඒ මෝඩ දෝෂය සොයා ගැනීමට අපේ කණ්ඩායමට දින භාගයක් වැය වූ බව. එවකට අප භාවිතා කළ MSVC අනුවාදය කුමක්දැයි මට විශ්වාස නැත.
pasbi

ඔබ භාවිතා කළේද නැතහොත් ඉදිරි ප්‍රකාශයක්ද යන්න ගැන සම්බන්ධකය පවා නොදැන සිටිය යුතු අතර, මේ දෙක ප්‍රමිතියට නිදහසේ හුවමාරු කර ගත හැකිය (වීඑස් අනතුරු අඟවන බව දන්නා නමුත්; මෙහි යමක් ගඳ නැත. එය ODR උල්ලං error නය කිරීමේ දෝෂයක් නොවන බව ඔබට විශ්වාසද? classstruct
කක්ෂයේ සැහැල්ලු ධාවන තරඟ


මට හරියටම මතක නැහැ. ගැටළුව සෘජුවම යෙදුමක නොව, පුස්තකාලයක භාවිතා කරන ලදි. සම්බන්ධකය තේරුම්ගත නොහැකි දෝෂ (LNK ???) ඇති කළ බව මම දනිමි. මම- structෆෝවර්ඩ්ස් සිට classෆෝවර්ඩ්ස් වෙනුවට ආදේශ කිරීමෙන් පසු ගැටලු පහව ගියේය. අද වන විට, මටත් එය අමුතු දෙයක් ලෙස පෙනේ. ඔබට ඒ ගැන යම් ආලෝකයක් හෙළි කළ හැකි නම් මම සතුටු වෙමි.
pasbi

4

පන්තිය.

පන්ති සාමාජිකයන් පෙරනිමියෙන් පුද්ගලිකයි.

class test_one {
    int main_one();
};

සමාන වේ

class test_one {
  private:
    int main_one();
};

එබැවින් ඔබ උත්සාහ කරන්නේ නම්

int two = one.main_one();

අපට දෝෂයක් ලැබෙනු ඇත: main_one is privateඑයට ප්‍රවේශ විය නොහැකි නිසා. එය මහජනතාව විසින් නියම කිරීමෙන් එය ආරම්භ කිරීමෙන් අපට එය විසඳිය හැකිය

class test_one {
  public:
    int main_one();
};

ව්යුහය.

Struct යනු පෙරනිමියෙන් සාමාජිකයන් පොදු වන පන්තියකි.

struct test_one {
    int main_one;
};

ක්‍රම main_oneපුද්ගලිකයි

class test_one {
  public:
    int main_one;
};

සාමාජිකයින්ට ඕනෑම වටිනාකමක් ලබා ගත හැකි දත්ත ව්‍යුහයන් සඳහා මම ව්‍යුහයන් භාවිතා කරමි, එය ඒ ආකාරයෙන් පහසුය.


4

structඉක්මවා යාමේ වාසියක් classනම්, එය “පළමු මහජන සාමාජිකයින්ට අනුගත වුවහොත් පුද්ගලිකයි” යනුවෙන් එක් කේත පේළියක් ඉතිරි කිරීමයි. මෙම ආලෝකයේ දී, මට යතුරු පදය නිෂ් class.ල ය.

පමණක් structසහ කිසි විටෙකත් භාවිතා කිරීමට තවත් හේතුවක් මෙන්න class. C ++ සඳහා සමහර කේත ශෛලීය මාර්ගෝපදේශ යෝජනා කරන්නේ ශ්‍රිත මැක්‍රෝස් සඳහා කුඩා අක්ෂර භාවිතා කිරීමයි, තාර්කිකත්වය නම් සාර්ව පේළිගත ශ්‍රිතයක් බවට පරිවර්තනය කළ විට නම වෙනස් කිරීම අවශ්‍ය නොවන බවයි. මෙහෙත් එහෙමයි. ඔබට ඔබේ ලස්සන සී-ස්ටයිල් ව්‍යුහයක් ඇති අතර එක් දිනක්, ඔබට ඉදිකිරීම්කරුවෙකු හෝ යම් පහසුවක් එකතු කළ යුතු බව ඔබ සොයා ගනී. ඔබ එය a ට වෙනස් classකරනවාද? සෑම තැනකම?

structS සහ classes අතර වෙනස හඳුනා ගැනීම ඕනෑවට වඩා කරදරයක් වන අතර, අප විසින් කළ යුතු දේ කිරීමේ ක්‍රමයට පිවිසීම - ක්‍රමලේඛනය. සී ++ හි බොහෝ ගැටලු මෙන්ම, එය පැන නගින්නේ පසුගාමී අනුකූලතාව සඳහා ඇති දැඩි ආශාවෙනි.


ඔබට එය a ට වෙනස් කිරීමට අවශ්‍ය classඇයි? යතුරුපදය සමඟ අර්ථ දක්වා ඇති පන්තියකට structසාමාජික කාර්යයන් හෝ ඉදිකිරීම්කරුවෙකු සිටිය නොහැකි යැයි ඔබ සිතුවාද ?
කක්ෂයේ සැහැල්ලු ධාවන තරඟ

IghtLightnessRacesinOrbit නිසා 1. අනුකූලතාව සහ 2. සමහර ස්ථිතික විශ්ලේෂකයින් 1
උල්ලං about නය

එය අනුගමනය නොකරයි. ඔබ පිළිපදින වෙනත් "අනුකූලතා" මොනවාද? සාමාජිකයෙකු සිටින සෑම පන්තියක්ම යතුරු පදයෙන් joe()අර්ථ දැක්විය classයුතුද? අවම වශයෙන් intසාමාජිකයන් 4 දෙනෙකු සිටින සෑම පන්තියක්ම structයතුරු පදයෙන් අර්ථ දැක්විය යුතුද?
කක්ෂයේ සැහැල්ලු ධාවන තරඟ

IghtLightnessRacesinOrbit මම සඳහන් කරන්නේ "POD සමස්ථයන් අර්ථ දක්වා ඇත struct, ක්‍රම සමඟ සමස්ථයන් අර්ථ දැක්වේ class". ඕනෑවට වඩා කරදර.
Vorac

3

ඒවා විවිධ පෙරනිමි සමඟ එකම දේ වේ (පෙරනිමියෙන් පුද්ගලිකයි class, සහ පෙරනිමියෙන් පොදුයි struct), එබැවින් න්‍යායිකව ඒවා සම්පූර්ණයෙන්ම එකිනෙකට හුවමාරු වේ.

එබැවින්, මට යම් තොරතුරක් එහා මෙහා ගෙනයාමට අවශ්‍ය නම්, මම ක්‍රම කිහිපයක් එහි දැමුවද (නමුත් බොහෝ නොවේ) මම ව්‍යුහයක් භාවිතා කරමි. එය බොහෝ දුරට පාරදෘශ්‍ය දෙයක් නම්, ප්‍රධාන භාවිතය ක්‍රමවේදයන් හරහා වන අතර දත්ත සාමාජිකයින්ට කෙලින්ම නොවේ නම්, මම සම්පූර්ණ පන්තියක් භාවිතා කරමි.


3

පෙරනිමියෙන් ව්‍යුහයන්ට පොදු ප්‍රවේශයක් ඇති අතර පෙරනිමියෙන් පන්තිවලට පුද්ගලික ප්‍රවේශයක් ඇත.

පුද්ගලිකව මම දත්ත හුවමාරු වස්තු සඳහා හෝ වටිනාකම් වස්තු ලෙස ව්‍යුහයන් භාවිතා කරමි. වෙනත් කේතයන් වෙනස් කිරීම වැළැක්වීම සඳහා මම සියලුම සාමාජිකයන් කොන්ස් ලෙස ප්‍රකාශ කරමි.


3

දෘශ්‍යතාවයට වෙනස් පෙරනිමි සහිත වුවත්, දෙකම එක structහා classසමාන වේ, structපෙරනිමිය පොදු වන අතර classපෙරනිමිය පුද්ගලික වේ. privateසහ public. සහ සුදුසු භාවිතයෙන් ඔබට එකක් වෙනස් කළ හැකිය . ඔවුන් දෙදෙනාම උරුමය, ක්‍රම, ඉදිකිරීම්කරුවන්, විනාශ කරන්නන් සහ වස්තු නැඹුරු භාෂාවක ඉතිරි සියලු යහපත් දේවලට ඉඩ දෙයි.

කෙසේ වෙතත්, මේ දෙක අතර ඇති එක් විශාල වෙනසක් structනම්, සී හි යතුරු පදයක් සහය දක්වන නමුත් classඑසේ නොවේ. මෙම එක් භාවිත කළ හැකි ක්රම structඇතුලත් ගොනුව භාවිතයට ගත හැකි බව #includeබොහෝ කාලයක් ලෙස C ++ හෝ C එක්කෝ structතැනිතලාවක් සී රටාවකි structගොනුව වැනි සී, එනම් කිසිදු C ++ විශේෂිත ප්රධාන වචන සමග අනුකූල වේ, ඇතුලත් හා අන් සියල්ල private, publicනෑ, ක්‍රම, උරුමයක් නැත, ආදිය.

AC විලාසිතාව structවෙනත් අතුරුමුහුණත් සමඟ භාවිතා කළ හැකි අතර එය C ශෛලිය භාවිතා කරමින් structදත්ත අතුරු මුහුණත හරහා ඉදිරියට ගෙන යයි.

AC ශෛලිය structයනු මතක ප්‍රදේශයක පිරිසැලසුම විස්තර කරන ආකාරයේ අච්චුවකි (C ++ අච්චුවක් නොව රටාවක් හෝ ස්ටෙන්සිල්). වසර ගණනාවක් තිස්සේ සී සහ සී ප්ලග්-ඉන් සමඟ භාවිතා කළ හැකි අතුරුමුහුණත් (මෙන්න ඔබ දෙස බලන්නේ ජාවා සහ පයිතන් සහ විෂුවල් බේසික්) ඒවායින් සමහරක් සී ශෛලිය සමඟ ක්‍රියා කරයි struct.


1

C ++ හි තාක්ෂණික වශයෙන් දෙකම එක හා සමානයි - නිදසුනක් ලෙස ව්‍යුහයකට අධික ලෙස ක්‍රියාකරවන්නන් සිටිය හැකිය.

කෙසේවෙතත් :

මම විවිධ වර්ගවල තොරතුරු එකවර යැවීමට කැමති විට මම ව්‍යුහයන් භාවිතා කරමි. මම “ක්‍රියාකාරී” වස්තුවක් සමඟ ගනුදෙනු කරන විට පන්ති භාවිතා කරමි.

එය උපකාරී වේ යැයි සිතමි.

#include <string>
#include <map>
using namespace std;

struct student
{
    int age;
    string name;
    map<string, int> grades
};

class ClassRoom
{
    typedef map<string, student> student_map;
  public :
    student getStudentByName(string name) const 
    { student_map::const_iterator m_it = students.find(name); return m_it->second; }
  private :
    student_map students;
};

නිදසුනක් ලෙස, මම ව්‍යුහගත ශිෂ්‍යයෙකුට නැවත ලබා ගැනීමේ ... () ක්‍රම නැවත ලබා දෙන්නෙමි - විනෝද වන්න.


1

ඔබ struct භාවිතා කිරීමට තෝරා ගන්නේ කවදාද සහ C ++ හි පන්තිය භාවිතා කරන්නේ කවදාද?

මම structනිර්වචනය කරන විට functorsසහ භාවිතා කරමි POD. නැතිනම් මම භාවිතා කරමි class.

// '()' is public by default!
struct mycompare : public std::binary_function<int, int, bool>
{
    bool operator()(int first, int second)
    { return first < second; }
};

class mycompare : public std::binary_function<int, int, bool>
{
public:
    bool operator()(int first, int second)
    { return first < second; }
};

1
මෙම පිළිතුර වයස් සං signs ා පෙන්වයි :) std::binary_function<>හුදෙක් ක්ෂය නොකෙරේ, c ++ 17 පවා එය ඉවත් කරයි.
sehe

මීට වසර 15 කට පෙර නිර්වචනය කරන ලද භාෂාවක් වන සී ++ 03 දී ලියන ලද බැවින් එය පුදුමයක් නොවේ.
කක්ෂයේ සැහැල්ලු ධාවන තරඟ

1

මට POD වර්ගය හෝ ෆන්ක්ටර් සෑදීමට අවශ්‍ය වූ විට මම ව්‍යුහයන් භාවිතා කරමි.


1

සියලුම පන්ති සාමාජිකයන් පෙරනිමියෙන් පුද්ගලික වන අතර සියලුම ව්‍යුහාත්මක සාමාජිකයන් පෙරනිමියෙන් පොදු වේ. පන්තියට සුපුරුදු පුද්ගලික පදනම් ඇති අතර ව්‍යුහයට පෙරනිමි පොදු පදනම් ඇත. C හි ව්‍යුහයට සාමාජික ශ්‍රිත තිබිය නොහැකි අතර C ++ හි මෙන් අපට සාමාජික ශ්‍රිත ව්‍යුහයට එකතු කළ හැකිය. මෙම වෙනස්කම් හැරුණු විට, මම ඔවුන් ගැන පුදුම වන කිසිවක් සොයාගෙන නැත.


0

මම struct භාවිතා කරන්නේ කිසියම් සාමාජික කාර්යයක් නොමැතිව (සාමාජික දත්ත මත ක්‍රියාත්මක වීමට) සහ දත්ත විචල්‍යයන්ට කෙලින්ම ප්‍රවේශ වීමට අවශ්‍ය වූ විට පමණි.

උදා: ලිපිගොනු සහ සොකට් ධාරාවන්ගෙන් දත්ත කියවීම / ලිවීම යනාදිය.

පෙරනිමි ප්‍රවේශය හැර තාක්ෂණික වශයෙන් පන්තිය සහ නූල් අතර විශාල වෙනසක් නොමැත. ඊට වඩා වැඩි ප්‍රමාණයක් ඔබ එය භාවිතා කරන ආකාරය ක්‍රමලේඛන විලාසය මත රඳා පවතී.


-4

ව්‍යුහයන් යනු දත්ත ව්‍යුහයක් ලෙස (බහු-දත්ත වර්ගයේ තොරතුරු සමූහයක් වැනි) අදහස් කර ඇති බවත්, කේත ඇසුරුම්කරණය සඳහා පන්ති යෙදී ඇති බවත් (උපසිරැසි සහ ක්‍රියාකාරකම් එකතු කිරීම වැනි) මම සිතුවෙමි.

:(


-7

මම කිසි විටෙකත් C ++ හි "struct" භාවිතා නොකරමි.

ඔබ හිතාමතාම ව්‍යාකූල වීමට උත්සාහ නොකරන්නේ නම්, ඔබට පෞද්ගලික සාමාජිකයන් අවශ්‍ය වූ විට ඔබ ව්‍යුහයක් භාවිතා කරන අවස්ථාවක් මට සිතාගත නොහැකිය.

ව්‍යුහයන් භාවිතා කිරීම දත්ත භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ සින්ටැක්ටික් ඇඟවීමකට වඩා වැඩි යමක් බව පෙනේ, නමුත් මම ඒ වෙනුවට පංතියක් සාදා පන්තියේ නාමයෙන් හෝ අදහස් දැක්වීම් හරහා එය පැහැදිලි කිරීමට උත්සාහ කරමි.

උදා

class PublicInputData {
    //data members
 };

මට අනුව, "දත්ත භාවිතා කරන්නේ කෙසේද යන්න පිළිබඳ සින්ටැක්ටික් ඇඟවීමක්" යනු ව්‍යුහයක් භාවිතා කිරීමට හොඳ හේතුවකි, විශේෂයෙන් විකල්පය නම් පන්තියේ නාමයේ අදහස් දැක්වීමක් හෝ නමක් භාවිතා කිරීමයි.
වික්ටර් සෙහර්

2
structපංතියේ සාමාජිකයන් පෙරනිමියෙන් මහජනතාව වනු ඇති බවට දැනටමත් පැහැදිලිව ප්‍රකාශ කිරීමක් නොවේද?
පරිශීලක නාමය
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.