Віртуальні функції.

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Інститут комп’ютерних наук та інформаційних технологій
Факультет:
Не вказано
Кафедра:
Інформаційних систем та мереж (ІСМ)

Інформація про роботу

Рік:
2008
Тип роботи:
Лабораторна робота
Предмет:
Основи програмування та алгоритмічні мови
Група:
КН-3

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти і науки України Національний університет „Львівська політехніка” Інститут комп’ютерних наук та інформаційних технологій Кафедра ІСМ Звіт про виконання лабораторної роботи №6 на тему: „Віртуальні функції” Виконав: студент групи КН-3 Львів – 2008 Мета роботи: вивчення способів та механізмів наслідування класів з використанням віртуальних функцій. Завдання для роботи Розробити програму на мові С++ з використанням класів: робота з рядками символів. Розробити клас, похідний до базового, використати віртуальні функції. Текст програми #include <iostream.h> #define MAX_STR_LEN 256 class MyString { protected: char *p; int iLen; public: MyString(); MyString(MyString &MyS); MyString(char *szSource); ~MyString(); void StrCpy(char *szSource); void StrCpyN(char *szSource, int n); void StrCat(char *szSource); void StrCatN(char *szSource, int n); char *GetStr(void); int GetLen(void); friend MyString operator + (MyString MyS1, MyString MyS2); void operator ()(MyString MyS); char & operator [] (int index); friend istream & operator >> (istream &is, MyString &MyS); friend ostream & operator << (ostream &os, MyString &MyS); virtual void Input(int iLen); virtual void Print(bool bNewLine); }; class String: public MyString { public: String(): MyString() {} String(String &S): MyString(S) {} String(char *szSource): MyString(szSource) {} ~String() {if (iLen) delete[] p; iLen = 0;} virtual void Input(int iLen); virtual void Print(bool bNewLine); }; MyString::MyString() { p = NULL; iLen = 0; } MyString::MyString(MyString &MyS) { iLen = MyS.GetLen(); p = new char [iLen + 1]; for (int i = 0; i < iLen; i++) p[i] = MyS.GetStr()[i]; p[iLen] = '\0'; } MyString::MyString(char *szSource) { StrCpy(szSource); } MyString::~MyString() { if (iLen) delete[] p; iLen = 0; } void MyString::StrCpy(char *szSource) { for (int n = 0; szSource[n] != '\0'; n++); StrCpyN(szSource, n); return; } void MyString::StrCpyN(char *szSource, int n) { if (iLen) delete[] p; for (iLen = 0; szSource[iLen] != '\0'; iLen++); if (n < iLen) iLen = n; if (iLen) { p = new char [iLen + 1]; for (int i = 0; i < iLen; i++) p[i] = szSource[i]; p[i] = '\0'; } return; } void MyString::StrCat(char *szSource) { for (int n = 0; szSource[n] != '\0'; n++); StrCatN(szSource, n); return; } void MyString::StrCatN(char *szSource, int n) { if (iLen == 0) { StrCpyN(szSource, n); } else { for (int iSourceLen = 0; szSource[iSourceLen] != '\0'; iSourceLen++); char *old_p = new char [iLen]; for (int i = 0; i < iLen; i++) old_p[i] = p[i]; delete[] p; if (n < iSourceLen) iSourceLen = n; p = new char [iLen + iSourceLen + 1]; for (i = 0; i < iLen; i++) p[i] = old_p[i]; delete[] old_p; for (i = iLen; i < (iLen + iSourceLen); i++) p[i] = szSource[i - iLen]; iLen += iSourceLen; p[iLen] = '\0'; } return; } char *MyString::GetStr(void) { return p; } int MyString::GetLen(void) { return iLen; } MyString operator + (MyString MyS1, MyString MyS2) { MyString MyS3(MyS1); MyS3.StrCat(MyS2.GetStr()); return MyS3; } void MyString::operator ()(MyString MyS) { StrCpy(MyS.GetStr()); return; } char & MyString::operator [] (int index) { if ((index < 0) || (index > iLen)) return p[iLen]; return p[index]; } istream & operator >> (istream &is, MyString &MyS) { if (MyS.iLen) delete[] MyS.p; MyS.p = new char [MAX_STR_LEN]; is>>MyS.p; for (MyS.iLen = 0; MyS.p[MyS.iLen] != '\0'; MyS.iLen++); return is; } ostream & operator << (ostream &os, MyString &MyS) { os<<MyS.p; return os; } void MyString::Input(int iLen = MAX_STR_LEN) { if (this->iLen) delete[] p; p = new char [iLen]; cin>>p; for (this->iLen = 0; p[this->iLen] != '\0'; this->iLen++); return; } void MyString::Print(bool bNewLine = true) { cout<<p; if (bNewLine) cout<<endl; return; } void String::Input(int iLen = MAX_STR_LEN) { if (this->iLen) delete[] p; p = new char [iLen]; cout<<"Input: "; // cin>>p; for (this->iLen = 0; p[this->iLen] != '\0'; this->iLen++); return; } void String::Print(bool bNewLine = true) { cout<<"Output: "; // cout<<p; if (bNewLine) cout<<endl; return; } int main(int argc, char* argv[]) { String S("Hello World!"); S.Print(); //cout<<"Input string: "; S.Input(); //cout<<" Your string: "; S.Print(); return 0; } Результат виконання програми Output: Hello World! Input: test Output: test Висновки На даній лабораторній роботі я вивчив способи та механізми наслідування з використанням віртуальних функцій. Розробив клас для роботи із рядками символів та написав похідний клас до базового, використовуючи віртуальні функції.
Антиботан аватар за замовчуванням

01.01.1970 03:01-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!