ВУЗ:
Составители:
Рубрика:
ɜɵɩɨɥɧɟɧɢɹ ɩɪɨɝɪɚɦɦɵ ɬɪɟɛɭɟɬɫɹ ɩɪɨɜɟɪɹɬɶ, ɧɚ ɨɛɴɟɤɬ ɤɚɤɨɝɨ ɬɢɩɚ ɫɫɵɥɚ-
ɟɬɫɹ ɭɤɚɡɚɬɟɥɶ, ɢ ɩɨɫɥɟ ɬɚɤɨɣ ɩɪɨɜɟɪɤɢ ɜɵɡɵɜɚɬɶ ɬɪɟɛɭɟɦɭɸ ɮɭɧɤɰɢɸ. ɗɬɢ
ɞɟɣɫɬɜɢɹ ɧɚɡɵɜɚɸɬ «ɩɨɡɞɧɢɦ» ɫɜɹɡɵɜɚɧɢɟɦ, ɜ ɨɬɥɢɱɢɟ ɨɬ «ɪɚɧɧɟɝɨ» ɫɜɹ-
ɡɵɜɚɧɢɹ, ɩɪɢ ɤɨɬɨɪɨɦ ɭɠɟ ɧɚ ɷɬɚɩɚɯ ɤɨɦɩɢɥɹɰɢɢ ɢɥɢ ɪɟɞɚɤɬɢɪɨɜɚɧɢɹ ɫɜɹ-
ɡɟɣ ɦɨɠɧɨ ɭɫɬɚɧɨɜɢɬɶ ɚɞɪɟɫ ɬɨɱɤɢ ɜɯɨɞɚ ɜɵɡɵɜɚɟɦɨɣ ɮɭɧɤɰɢɢ. ȼ ɨɛɴɟɤɬ-
ɧɨ-ɨɪɢɟɧɬɢɪɨɜɚɧɧɵɯ ɹɡɵɤɚɯ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ ɞɥɹ ɪɟɲɟɧɢɹ ɷɬɨɣ ɩɪɨɛɥɟ-
ɦɵ ɩɪɢɦɟɧɹɸɬɫɹ ɜɢɪɬɭɚɥɶɧɵɟ ɦɟɬɨɞɵ.
4.5.2. Ɉɩɢɫɚɧɢɟ ɜɢɪɬɭɚɥɶɧɵɯ ɮɭɧɤɰɢɣ
Ɏɭɧɤɰɢɹ-ɤɨɦɩɨɧɟɧɬɚ ɤɥɚɫɫɚ ɨɛɴɹɜɥɹɟɬɫɹ ɤɚɤ ɜɢɪɬɭɚɥɶɧɚɹ ɭɤɚɡɚɧɢɟɦ
ɤɥɸɱɟɜɨɝɨ ɫɥɨɜɚ
virtual. Ɏɭɧɤɰɢɢ-ɤɨɦɩɨɧɟɧɬɵ ɜ ɩɪɨɢɡɜɨɞɧɵɯ ɤɥɚɫɫɚɯ,
ɡɚɦɟɧɹɸɳɢɟ ɜɢɪɬɭɚɥɶɧɭɸ ɮɭɧɤɰɢɸ ɛɚɡɨɜɨɝɨ ɤɥɚɫɫɚ, ɞɨɥɠɧɵ ɨɛɴɹɜɥɹɬɶɫɹ
ɫ ɬɟɦ ɠɟ ɢɦɟɧɟɦ, ɬɟɦ ɠɟ ɫɩɢɫɤɨɦ ɩɚɪɚɦɟɬɪɨɜ ɢ ɬɢɩɨɦ ɜɨɡɜɪɚɳɚɟɦɨɝɨ ɡɧɚ-
ɱɟɧɢɹ, ɱɬɨ ɢ ɫɨɨɬɜɟɬɫɬɜɭɸɳɚɹ ɮɭɧɤɰɢɹ ɛɚɡɨɜɨɝɨ ɤɥɚɫɫɚ. ȿɫɥɢ ɢɡ ɩɪɨɢɡ-
ɜɨɞɧɨɝɨ ɤɥɚɫɫɚ ɧɟ ɨɛɪɚɡɭɟɬɫɹ ɧɨɜɵɯ ɩɪɨɢɡɜɨɞɧɵɯ ɤɥɚɫɫɨɜ, ɤɥɸɱɟɜɨɟ ɫɥɨɜɨ
virtual ɜ ɨɩɢɫɚɧɢɢ ɮɭɧɤɰɢɢ ɦɨɠɧɨ ɨɩɭɫɬɢɬɶ.
ȿɫɥɢ ɜ ɩɪɨɢɡɜɨɞɧɨɦ ɤɥɚɫɫɟ ɧɟɬ ɨɛɴɹɜɥɟɧɢɹ ɮɭɧɤɰɢɢ ɫ ɬɟɦ ɠɟ ɢɦɟɧɟɦ,
ɱɬɨ ɢ ɜɢɪɬɭɚɥɶɧɚɹ ɮɭɧɤɰɢɹ ɛɚɡɨɜɨɝɨ ɤɥɚɫɫɚ, ɛɭɞɟɬ ɜɵɡɵɜɚɬɶɫɹ ɮɭɧɤɰɢɹ ɛɚ-
ɡɨɜɨɝɨ ɤɥɚɫɫɚ.
ȼɢɪɬɭɚɥɶɧɚɹ ɮɭɧɤɰɢɹ ɦɨɠɟɬ ɛɵɬɶ ɨɛɴɹɜɥɟɧɚ ɜ ɮɨɪɦɟ:
virtual void print()=0;
Ɍɚɤɚɹ ɮɭɧɤɰɢɹ ɧɚɡɵɜɚɟɬɫɹ «ɱɢɫɬɨɣ» (pure) ɜɢɪɬɭɚɥɶɧɨɣ ɮɭɧɤɰɢɟɣ, ɚɨɛɴ-
ɟɤɬɧɵɣ ɬɢɩ, ɫɨɞɟɪɠɚɳɢɣ ɟɟ ɨɛɴɹɜɥɟɧɢɟ, ɧɚɡɵɜɚɟɬɫɹ ɚɛɫɬɪɚɤɬɧɵɦ ɨɛɴɟɤɬ-
ɧɵɦ ɬɢɩɨɦ. ȼ ɩɪɨɝɪɚɦɦɟ ɧɟ ɦɨɝɭɬ ɫɨɡɞɚɜɚɬɶɫɹ ɷɤɡɟɦɩɥɹɪɵ ɚɛɫɬɪɚɤɬɧɵɯ
ɬɢɩɨɜ, ɬɚɤɨɣ ɬɢɩ ɦɨɠɟɬ ɢɫɩɨɥɶɡɨɜɚɬɶɫɹ ɬɨɥɶɤɨ ɞɥɹ ɨɛɪɚɡɨɜɚɧɢɹ ɩɪɨɢɡɜɨɞ-
ɧɵɯ ɬɢɩɨɜ, ɩɪɢɱɟɦ ɜ ɩɪɨɢɡɜɨɞɧɨɦ ɬɢɩɟ ɫɥɟɞɭɟɬ ɥɢɛɨ ɫɧɨɜɚ ɨɩɪɟɞɟɥɢɬɶ ɷɬɭ
ɜɢɪɬɭɚɥɶɧɭɸ ɮɭɧɤɰɢɸ ɤɚɤ ɱɢɫɬɭɸ, ɥɢɛɨ ɨɛɴɹɜɢɬɶ ɟɟ ɤɚɤ ɨɛɵɱɧɭɸ ɜɢɪɬɭ-
ɚɥɶɧɭɸ ɮɭɧɤɰɢɸ, ɜɵɩɨɥɧɹɸɳɭɸ ɤɨɧɤɪɟɬɧɵɟ ɞɟɣɫɬɜɢɹ.
ȼɢɪɬɭɚɥɶɧɵɟ ɮɭɧɤɰɢɢ ɨɫɨɛɟɧɧɨ ɩɨɥɟɡɧɵ, ɤɨɝɞɚ ɤ ɦɟɬɨɞɨɦ ɤɥɚɫɫɚ ɬɪɟ-
ɛɭɟɬɫɹ ɨɛɪɚɳɚɬɶɫɹ ɱɟɪɟɡ ɭɤɚɡɚɬɟɥɶ ɧɚ ɷɤɡɟɦɩɥɹɪ ɤɥɚɫɫɚ, ɚ ɫɚɦ ɷɬɨɬ ɭɤɚɡɚ-
ɬɟɥɶ ɢɦɟɟɬ ɬɢɩ ɭɤɚɡɚɬɟɥɹ ɧɚ ɛɚɡɨɜɵɣ ɤɥɚɫɫ. ɉɭɫɬɶ, ɧɚɩɪɢɦɟɪ, ɜ ɤɥɚɫɫɟ
TBase ɨɛɴɹɜɥɟɧɚ ɱɢɫɬɚɹ ɜɢɪɬɭɚɥɶɧɚɹ ɮɭɧɤɰɢɹ print:
class TBase // ɛɚɡɨɜɵɣ ɤɥɚɫɫ ɞɥɹ ɦɚɫɫɢɜɨɜ ɜɫɟɯ ɬɢɩɨɜ
{
int size, //ɪɚɡɦɟɪ ɷɥɟɦɟɧɬɚ
count, //ɬɟɤɭɳɟɟ ɱɢɫɥɨ ɷɥɟɦɟɧɬɨɜ
maxCount, //ɪɚɡɦɟɪ ɜɵɞɟɥɟɧɧɨɣ ɩɚɦɹɬɢ ɜ ɛɚɣɬɚɯ
delta; //ɩɪɢɪɚɳɟɧɢɟ ɩɚɦɹɬɢ ɜ ɛɚɣɬɚɯ
char *pmem; //ɭɤɚɡɚɬɟɥɶ ɧɚ ɜɵɞɟɥɟɧɧɭɸ ɩɚɦɹɬɶ
int changeSize(); //ɩɟɪɟɪɚɫɩɪɟɞɟɥɟɧɢɟ ɩɚɦɹɬɢ
protected:
void* getAddr(){return (void*)pmem;};
void addNewItem(void*); //ɞɨɛɚɜɥɟɧɢɟ ɜ ɤɨɧɟɰ ɦɚɫɫɢɜɚ
void error(const char* msg){cout<<msg<<endl;};
50
ɜɵɩɨɥɧɟɧɢɹ ɩɪɨɝɪɚɦɦɵ ɬɪɟɛɭɟɬɫɹ ɩɪɨɜɟɪɹɬɶ, ɧɚ ɨɛɴɟɤɬ ɤɚɤɨɝɨ ɬɢɩɚ ɫɫɵɥɚ- ɟɬɫɹ ɭɤɚɡɚɬɟɥɶ, ɢ ɩɨɫɥɟ ɬɚɤɨɣ ɩɪɨɜɟɪɤɢ ɜɵɡɵɜɚɬɶ ɬɪɟɛɭɟɦɭɸ ɮɭɧɤɰɢɸ. ɗɬɢ ɞɟɣɫɬɜɢɹ ɧɚɡɵɜɚɸɬ «ɩɨɡɞɧɢɦ» ɫɜɹɡɵɜɚɧɢɟɦ, ɜ ɨɬɥɢɱɢɟ ɨɬ «ɪɚɧɧɟɝɨ» ɫɜɹ- ɡɵɜɚɧɢɹ, ɩɪɢ ɤɨɬɨɪɨɦ ɭɠɟ ɧɚ ɷɬɚɩɚɯ ɤɨɦɩɢɥɹɰɢɢ ɢɥɢ ɪɟɞɚɤɬɢɪɨɜɚɧɢɹ ɫɜɹ- ɡɟɣ ɦɨɠɧɨ ɭɫɬɚɧɨɜɢɬɶ ɚɞɪɟɫ ɬɨɱɤɢ ɜɯɨɞɚ ɜɵɡɵɜɚɟɦɨɣ ɮɭɧɤɰɢɢ. ȼ ɨɛɴɟɤɬ- ɧɨ-ɨɪɢɟɧɬɢɪɨɜɚɧɧɵɯ ɹɡɵɤɚɯ ɩɪɨɝɪɚɦɦɢɪɨɜɚɧɢɹ ɞɥɹ ɪɟɲɟɧɢɹ ɷɬɨɣ ɩɪɨɛɥɟ- ɦɵ ɩɪɢɦɟɧɹɸɬɫɹ ɜɢɪɬɭɚɥɶɧɵɟ ɦɟɬɨɞɵ. 4.5.2. Ɉɩɢɫɚɧɢɟ ɜɢɪɬɭɚɥɶɧɵɯ ɮɭɧɤɰɢɣ Ɏɭɧɤɰɢɹ-ɤɨɦɩɨɧɟɧɬɚ ɤɥɚɫɫɚ ɨɛɴɹɜɥɹɟɬɫɹ ɤɚɤ ɜɢɪɬɭɚɥɶɧɚɹ ɭɤɚɡɚɧɢɟɦ ɤɥɸɱɟɜɨɝɨ ɫɥɨɜɚ virtual. Ɏɭɧɤɰɢɢ-ɤɨɦɩɨɧɟɧɬɵ ɜ ɩɪɨɢɡɜɨɞɧɵɯ ɤɥɚɫɫɚɯ, ɡɚɦɟɧɹɸɳɢɟ ɜɢɪɬɭɚɥɶɧɭɸ ɮɭɧɤɰɢɸ ɛɚɡɨɜɨɝɨ ɤɥɚɫɫɚ, ɞɨɥɠɧɵ ɨɛɴɹɜɥɹɬɶɫɹ ɫ ɬɟɦ ɠɟ ɢɦɟɧɟɦ, ɬɟɦ ɠɟ ɫɩɢɫɤɨɦ ɩɚɪɚɦɟɬɪɨɜ ɢ ɬɢɩɨɦ ɜɨɡɜɪɚɳɚɟɦɨɝɨ ɡɧɚ- ɱɟɧɢɹ, ɱɬɨ ɢ ɫɨɨɬɜɟɬɫɬɜɭɸɳɚɹ ɮɭɧɤɰɢɹ ɛɚɡɨɜɨɝɨ ɤɥɚɫɫɚ. ȿɫɥɢ ɢɡ ɩɪɨɢɡ- ɜɨɞɧɨɝɨ ɤɥɚɫɫɚ ɧɟ ɨɛɪɚɡɭɟɬɫɹ ɧɨɜɵɯ ɩɪɨɢɡɜɨɞɧɵɯ ɤɥɚɫɫɨɜ, ɤɥɸɱɟɜɨɟ ɫɥɨɜɨ virtual ɜ ɨɩɢɫɚɧɢɢ ɮɭɧɤɰɢɢ ɦɨɠɧɨ ɨɩɭɫɬɢɬɶ. ȿɫɥɢ ɜ ɩɪɨɢɡɜɨɞɧɨɦ ɤɥɚɫɫɟ ɧɟɬ ɨɛɴɹɜɥɟɧɢɹ ɮɭɧɤɰɢɢ ɫ ɬɟɦ ɠɟ ɢɦɟɧɟɦ, ɱɬɨ ɢ ɜɢɪɬɭɚɥɶɧɚɹ ɮɭɧɤɰɢɹ ɛɚɡɨɜɨɝɨ ɤɥɚɫɫɚ, ɛɭɞɟɬ ɜɵɡɵɜɚɬɶɫɹ ɮɭɧɤɰɢɹ ɛɚ- ɡɨɜɨɝɨ ɤɥɚɫɫɚ. ȼɢɪɬɭɚɥɶɧɚɹ ɮɭɧɤɰɢɹ ɦɨɠɟɬ ɛɵɬɶ ɨɛɴɹɜɥɟɧɚ ɜ ɮɨɪɦɟ: virtual void print()=0; Ɍɚɤɚɹ ɮɭɧɤɰɢɹ ɧɚɡɵɜɚɟɬɫɹ «ɱɢɫɬɨɣ» (pure) ɜɢɪɬɭɚɥɶɧɨɣ ɮɭɧɤɰɢɟɣ, ɚ ɨɛɴ- ɟɤɬɧɵɣ ɬɢɩ, ɫɨɞɟɪɠɚɳɢɣ ɟɟ ɨɛɴɹɜɥɟɧɢɟ, ɧɚɡɵɜɚɟɬɫɹ ɚɛɫɬɪɚɤɬɧɵɦ ɨɛɴɟɤɬ- ɧɵɦ ɬɢɩɨɦ. ȼ ɩɪɨɝɪɚɦɦɟ ɧɟ ɦɨɝɭɬ ɫɨɡɞɚɜɚɬɶɫɹ ɷɤɡɟɦɩɥɹɪɵ ɚɛɫɬɪɚɤɬɧɵɯ ɬɢɩɨɜ, ɬɚɤɨɣ ɬɢɩ ɦɨɠɟɬ ɢɫɩɨɥɶɡɨɜɚɬɶɫɹ ɬɨɥɶɤɨ ɞɥɹ ɨɛɪɚɡɨɜɚɧɢɹ ɩɪɨɢɡɜɨɞ- ɧɵɯ ɬɢɩɨɜ, ɩɪɢɱɟɦ ɜ ɩɪɨɢɡɜɨɞɧɨɦ ɬɢɩɟ ɫɥɟɞɭɟɬ ɥɢɛɨ ɫɧɨɜɚ ɨɩɪɟɞɟɥɢɬɶ ɷɬɭ ɜɢɪɬɭɚɥɶɧɭɸ ɮɭɧɤɰɢɸ ɤɚɤ ɱɢɫɬɭɸ, ɥɢɛɨ ɨɛɴɹɜɢɬɶ ɟɟ ɤɚɤ ɨɛɵɱɧɭɸ ɜɢɪɬɭ- ɚɥɶɧɭɸ ɮɭɧɤɰɢɸ, ɜɵɩɨɥɧɹɸɳɭɸ ɤɨɧɤɪɟɬɧɵɟ ɞɟɣɫɬɜɢɹ. ȼɢɪɬɭɚɥɶɧɵɟ ɮɭɧɤɰɢɢ ɨɫɨɛɟɧɧɨ ɩɨɥɟɡɧɵ, ɤɨɝɞɚ ɤ ɦɟɬɨɞɨɦ ɤɥɚɫɫɚ ɬɪɟ- ɛɭɟɬɫɹ ɨɛɪɚɳɚɬɶɫɹ ɱɟɪɟɡ ɭɤɚɡɚɬɟɥɶ ɧɚ ɷɤɡɟɦɩɥɹɪ ɤɥɚɫɫɚ, ɚ ɫɚɦ ɷɬɨɬ ɭɤɚɡɚ- ɬɟɥɶ ɢɦɟɟɬ ɬɢɩ ɭɤɚɡɚɬɟɥɹ ɧɚ ɛɚɡɨɜɵɣ ɤɥɚɫɫ. ɉɭɫɬɶ, ɧɚɩɪɢɦɟɪ, ɜ ɤɥɚɫɫɟ TBase ɨɛɴɹɜɥɟɧɚ ɱɢɫɬɚɹ ɜɢɪɬɭɚɥɶɧɚɹ ɮɭɧɤɰɢɹ print: class TBase // ɛɚɡɨɜɵɣ ɤɥɚɫɫ ɞɥɹ ɦɚɫɫɢɜɨɜ ɜɫɟɯ ɬɢɩɨɜ { int size, //ɪɚɡɦɟɪ ɷɥɟɦɟɧɬɚ count, //ɬɟɤɭɳɟɟ ɱɢɫɥɨ ɷɥɟɦɟɧɬɨɜ maxCount, //ɪɚɡɦɟɪ ɜɵɞɟɥɟɧɧɨɣ ɩɚɦɹɬɢ ɜ ɛɚɣɬɚɯ delta; //ɩɪɢɪɚɳɟɧɢɟ ɩɚɦɹɬɢ ɜ ɛɚɣɬɚɯ char *pmem; //ɭɤɚɡɚɬɟɥɶ ɧɚ ɜɵɞɟɥɟɧɧɭɸ ɩɚɦɹɬɶ int changeSize(); //ɩɟɪɟɪɚɫɩɪɟɞɟɥɟɧɢɟ ɩɚɦɹɬɢ protected: void* getAddr(){return (void*)pmem;}; void addNewItem(void*); //ɞɨɛɚɜɥɟɧɢɟ ɜ ɤɨɧɟɰ ɦɚɫɫɢɜɚ void error(const char* msg){cout<
Страницы
- « первая
- ‹ предыдущая
- …
- 48
- 49
- 50
- 51
- 52
- …
- следующая ›
- последняя »