Technology sharing

Classes et Res (Pars I)

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

In priore capite nonnullas notiones classium et objectorum breviter commemoravimus. Nunc eas simul recenseamus.

Classis definitionem

Classis definitio forma

genus est genus definitivum keyword, nomen definitivae classis, {} est corpus classis, sequitur ";", et membrum functiones in genere definitae augentur per default (inline)

accessum adjuncto

Forma encapsulationis, in tria genera divisa: publica, privata, tuta. Scopus permissionum accessus ab eo loco incipit, ubi accessus adjuncto apparet usque ad proximum adjunctum accessus apparet finit ad } i.e., class.

genus domain

Classis novum ambitum definit. Omnia membra classis in ambitu classis sunt. Cum membra definiunt extra genus, necesse est utendi:: scoporum operariorum indicandi cuius generis dominium membrum pertinet.

Hoc est pluma film ///

Instantiate

conceptum

• Processus faciendi rei in memoria physica utens genus generis vocatur instantiatio classis.
• Classis est obiecti descriptio abstracta. Simile est exemplar
Declaratio est nullumque spatium collocabitur. Spatium solum collocabitur cum obiectum instantiatur utens classe.
• Classis obiecta multa instantiare potest.

Ad summam in una sententia: solum cum objecta instantiantur classibus spatium collocabunt.

  1. class Date
  2. {
  3. public:
  4. void Init(int year, int month, int day)
  5. {
  6. _year = year;
  7. _month = month;
  8. _day = day;
  9. }
  10. void Print()
  11. {
  12. cout << _year << "/" << _month << "/" << _day << endl;
  13. }
  14. private:
  15. // 这⾥只是声明,没有开空间
  16. int _year;
  17. int _month;
  18. int _day;
  19. };

In praedicto codice, sodalis variabiles in privato tantum definitur nec spatium novum aperitur;

  1. // Date类实例化出对象d1和d2
  2. Date d1;
  3. Date d2;

Tunc duo objecta nova instantiantur, ut novum spatium aperiatur.

Memoria dam praecepta

definition

• Primum membrum est in electronica offset 0 ex structura.
• Aliud membrum variabile ad inscriptiones proscriptas debet esse numerus integer multiplex (logarithmus).
• Nota: logarithmum = minorem defaltam logarithmi compilatoris et membri magnitudinem.
• Logarithmus default in VS est 8
• Magnitudo totius structurae est: numerus maximus parwise numerus integer multiplex (maximus omnium variabilium generum et minimus defectus parationis parametri).
• Si structura nidificatur, structura nidificata adsimilat integram multiplicem eius maximi logarithmi et altiore magnitudine structurae.
Est integer multiplex omnium maximorum logarithmorum (including logarithmorum structurarum nidificatorum).

Hoc est quod in C lingua scimus. Accipe sequentes quaestiones in exemplum.

  1. // 计算⼀下A实例化的对象是多⼤?
  2. class A
  3. {
  4. public:
  5. void Print()
  6. {
  7. cout << _ch << endl;
  8. }
  9. private:
  10. char _ch;
  11. int _i;
  12. };

Nulla functionis vocatur, ita solum variabilium membri intueri. _ch est character char, cum magnitudine 1 byte; alignment numerus, sic est _ Pone ch in positione cum subscript 0, tria spatia blank relinque, et pone _ i In conditionibus occurrit, sic huius quaestionis responsio est 8 .

Quid, si haec duo quaeruntur?

  1. class B
  2. {
  3. public:
  4. void Print()
  5. {
  6. //...
  7. }
  8. };
  9. class C
  10. {
  11. };

Inveniri possumus vacuum munus in classe B et nulla membra in genere C. In C lingua, utramque classes spatium 1 byte occupare facimus.

hoc indicatorum

conceptum

DDuo membra membra sunt, Init et Print, in genere comedit.
Cum munus excudendi, quomodo scit munus, utrum objectum d1 vel obiectum d2 accedere debeat?Deinde hic videbimus quod C++ dat
Haec regula implicita quaestionem solvit hic
• Post compilator, membrum functionum classium monstratorem generis currentis, qui monstrator vocatur, ad primum positionem parametri formalis addet. Exempli gratia, realis exemplar Init of Date classis, vacuum Init (Date* const hoc, int annum,
int mensis, int die)
• Cum accessu variabilium in membro functionibus alicuius generis, essentialiter accessiuntur per hunc monstratorem.
&gt;_annus = annus;
• C ++ monstratorem hunc expresse scribi non posse in positione parametri actualis et parametri formalis (hoc tractabit compilator in compilatione), sed hic monstrator explicite in corpore functionis adhiberi potest.

exempli gratia

  1. class Date
  2. {
  3. public:
  4. // void Init(Date* const this, int year, int month, int day)
  5. void Init(int year, int month, int day)
  6. {
  7. // 编译报错:error C2106: “=”: 左操作数必须为左值
  8. // this = nullptr;
  9. // this->_year = year;
  10. _year = year;
  11. this->_month = month;
  12. this->_day = day;
  13. }
  14. void Print()
  15. {
  16. cout << _year << "/" << _month << "/" << _day << endl;
  17. }
  18. private:
  19. // 这⾥只是声明,没有开空间
  20. int _year;
  21. int _month;
  22. int _day;
  23. };
  24. int main()
  25. {
  26. // Date类实例化出对象d1和d2
  27. Date d1;
  28. Date d2;
  29. // d1.Init(&d1, 2024, 3, 31);this指针
  30. d1.Init(2024, 3, 31);
  31. // d1.Init(&d2, 2024, 7, 5);
  32. d2.Init(2024, 7, 5);
  33. //不能自己写
  34. return 0;
  35. }

Scriptura enim parametri actualis in functione Init, C ++ invisibile constantem hunc monstratorem (quod mutari non potest) addet primae variabilis functionis, ut in commentis functionis demonstratum est.

Animadverte:

Quamdiu nullum indicatorum non dereference, nullus error afferetur.

  1. class A
  2. {
  3. public:
  4. void Print()
  5. {
  6. cout << "A::Print()" << endl;
  7. }
  8. private:
  9. int _a;
  10. };
  11. int main()
  12. {
  13. A* p = nullptr;
  14. p->Print();
  15. return 0;
  16. }

Etsi p assignatur nullum monstratorem et functioni Print indicatum, non est dereference, ut nullus error hic referatur.

  1. class A
  2. {
  3. public:
  4. void Print()
  5. {
  6. cout << "A::Print()" << endl;
  7. cout << _a << endl;//这个地方多了一句
  8. }
  9. private:
  10. int _a;
  11. };
  12. int main()
  13. {
  14. A* p = nullptr;
  15. p->Print();
  16. return 0;
  17. }

Cum programma praecedente collatus, una tantum sententiarum est &lt;&lt; _a &lt;&lt; endl, sed in hoc tempore nullum monstratorem demonstrat membrum variabile, et index nullus dereference erit, ergo programma errorem nuntiabit.

Default membrum munus classis

conceptum

Defalta membrum munus est munus membrum quod non explicite ab utente perficitur et ab ipso compilator generatur. Munus membrum defaltum dicitur. Pro genere, si non scribimus, compilator generabit sequentia 6 default socius functiones per defaltam, quae sunt sequentes sex.

Constructor

definition

Constructor munus est speciale membrum. Animadvertendum est quod, quamvis nomine conditoris nominetur constructor, praecipuum munus constructoris non est spatium apertum ad res creandas (obiectum locale saepe utimur est spatium cum acervus corpus creatum est)), sed obiectum initialized cum obiectum instatur. Essentia est reponere munus initialization Init.

Features

Top quinque features

1. Munus nomen idem est quod genus nominis.
2. Nullius reditus pretii. (Non opus est scribere inane)
3. Cum obiecto instantiatur, ratio automatice conditorem respondentem appellabit.
4. Constructores onerari possunt.
5. Si constructor explicite definitus non est in genere, C++ compilator sponte generabit default machinator parametri.

Prima quinque res simpliciter sunt relative, exemplum praebeamus:

  1. class Date
  2. {
  3. public:
  4. //1.⽆参构造函数,无需写void
  5. Date()//若不写,则构造函数会写出这一中无参构造函数
  6. {
  7. _year = 1;
  8. _month = 1;
  9. _day = 1;
  10. }
  11. //2.全缺省构造函数
  12. Date(int year = 1, int month = 1, int day = 1)
  13. {
  14. _year = year;
  15. _month = month;
  16. _day = day;
  17. }
  18. private:
  19. int _year;
  20. int _month;
  21. int _day;
  22. }
  23. int main()
  24. {
  25. Date d1;//此时相当于已经自动调用了Init函数
  26. Date d2;
  27. return 0;
  28. }

Duo constructores in programmatis scripti sunt, unus est machinator parameter et alter constructor defalta plena. Cum munus non scribimus, programmata scribet ad unum constructorem parametri duae functiones cumulantur functionibus, propter ambiguitatem vocatum, duae functiones simul esse non possunt.

Haec duo

6. Constructores parameterless, constructores plenus defalta, et conditores ab compilator generati per defaltam cum non scribimus conditorem nominantur omnes conditores default. Sed una et sola harum trium functionum una est et simul esse non potest. Quamvis constructor parameterless et constructor plenum default constituunt functionem onerandi, erit ambiguitas in vocatione illa. Animadvertendum est quod multi studentes putant defectum conditoris esse defectum conditoris ab compilator generatum. Re vera, constructor parameter et plenus defalta constructor, sunt etiam defaltae conditores ambitum defaltam appellaverunt.

6

Sexta linea est magis complicata: fabricatores parametri, omnia defalta constructores, et fabricatores ab compilator per defaltam generati cum non scribimus fabricatorem nominantur omnes conditores defectus, et unus tantum esse non debet sicut fabricator ab compilator defalta generatur!

7


7. Si non scribimus, fabricator ab compilator generatus per defaltam requisita non habet ad initializationem in variabilium membri specie . Ad consuetudinem generis membrum variabilium, oportet vocare default constructor huius membri variabilis ut illud initializet. Si hoc membrum variabilis defaltam machinator non habet, error indicabitur. Si vis initializare hoc membrum variabile, opus est ut album initialization ad problema solvendum .

destructor

conceptum

Munus destruentis oppositum est fabricatori Non opus est ut dimittatur. Munus destruentis est similis Destruere munus quod ante in Stack impletum est. Exempli gratia, Date perdere non habet Destructor est sicut munus perdere.

Features

1. Destructor nomen praecedit charactere~ antequam genus nominis. (Similis est bitwise negationem in C lingua)
2. Nulla pretium nec diam nec pretium. (similis est structurae, et nihil attinet vacuum addere)
3. Classis unum solum habere potest destructorem. Si non expresse definitum est, ratio sponte defaltam destructorem generabit.
4. Obiecto vitae cyclo finito, systema destruentem sponte vocabit.
5. Similis constructor, si destructor a compilator ipso genitus non scribimus, membra constructa in typum non procedet.
6. Sciendum est etiam, quod cum expresse scribimus destructor, destructor consuetudinis, etiam membrum genus vocabitur.
7. Si nullae sunt facultates in classibus applicatae, destructor scribendus non est, et defectus destructor ab compilator generatus, ut Date, directe adhiberi potest. non opus est ut ostendas eam.
8. Pro multiplicibus objectis in loci ditione, C++ quod ea quae postea definita sunt, prius delebitur.

Usus destructor

Eadem cum fabricatore supra, destructor defalta a C++ automatice generata plerumque nobis non multum adiuvabit, sed commodius est in quibusdam raris casibus, ut per duos acervos ad queue efficiendum:

  1. public:
  2. Stack(int n = 4)//相当于Init
  3. {
  4. _a = (STDataType*)malloc(sizeof(STDataType) * n);
  5. if (nullptr == _a)
  6. {
  7. perror("malloc fail!");
  8. return;
  9. }
  10. _capacity = n;
  11. _top = 0;
  12. }
  13. ~Stack()//相当于Destroy
  14. {
  15. cout << "~Stack()" << endl;
  16. free(_a);
  17. _a = nullptr;
  18. _top = _capacity = 0;
  19. }
  20. private:
  21. STDataType* _a;
  22. size_t _capacity;
  23. size_t _top;
  24. };
  25. class MyQueue
  26. {
  27. public:
  28. //编译器默认⽣成MyQueue的析构函数调⽤了Stack的析构,释放的Stack内部的资源
  29. // 显⽰写析构,也会⾃动调⽤Stack的析构
  30. private:
  31. Stack pushst;
  32. Stack popst;
  33. };

Hoc tempore, compilator in MyQueue automatice conditorem (initializationem) et destruentem (destructorem) acervum vocat.