С++ тілінің базалық жабдықтары

Автор: Пользователь скрыл имя, 11 Февраля 2013 в 11:06, лекция

Описание работы

С++ тілінің базалық жабдықтары. Программа құрылымы. Жиымдар
Қарастырылатын сұрақтар:
1. С++ тілінің базалық жабдықтары
2. Мәліметтер типі
3. Программа құрылымы
4. Айнымалылар мен өрнектер
5. Тармақталу, басқаруды беру операторлары және циклдік операторлар
6. Жиымдар (массивтер)

Работа содержит 1 файл

C++.doc

— 332.50 Кб (Скачать)

Көшіру конструкторы- бұл класстың объектісіне нұсқауыштың жалғыз параметрі ретінде алынатын конструктордың арнайы түрі.

Берілу форматы:

T::T(const T&)  {конструктор денесі},

мұндағы Т-конструктор  аты.

Жаңа объект бар объектіні  көшіру арқылы алынатын болса, онда көшіру конструкторы шақырылады.

 

 

 

4лекция

Конструкторлар  және қатарларды меншіктеу. string класындағы функциялар

Қарастырылатын сұрақтар:

  1. Конструкторлар және қатарларды меншіктеу
  2. Қатардың бөлігін қосу және меншіктеу
  3. Қатарларды түрлендіру
  4. Қатардың құрамын іздеу
  5. Қатардың бөліктерін салыстыру

Қатар - нөл-символмен  аяқталатын символдар массиві. С++-те қатармен жұмыс істеудің екі мүмкіндігі бар: С библиотекасынан (<string.h> немесе <cstring>) мұрагерлікке қалған функциялар және С++-тің string библиотекалық класы. С-дан мұрагерлікке қалған функциялар қолдану кезінде ыңғайсыз және қауіпті, себебі олар қатардың шекарадан шығып кетуін қадағаламайды.

 string типті қатары ақпараттың шекарадан шығып кетуінен қорғалған және операциялар көмегімен жұмыс істеуге болады

Қатармен жұмыс істеудің негізгі  ерекшеліктері мен тәсілдерін қарастырайық.

 

  1. Конструкторлар және қатарларды меншіктеу

 string класында бірнеше конструкторлар анықталған:

 string ();

 string (const char *);

 string (const char *, int n);

string (  string &);

 Бірінші конструктор string типті бос объектіні құрады. Екінші конструктор  ескі стильдегі қатардың негізінде string типті объектіні құрады, ал үшіншісі string типті

объектіні құрады және бірінші параметр нұсқаған қатардан n символды жазады. Төртінші конструктор көшіру конструкторы болып табылады, ол параметр ретінде берілген объектінің көшірмесі арқылы жаңа объектіні құрады.

string класында үш меншіктеу операциясы  анықталған:

string&operator= (const string&str);

string&operator= (const char*s);

string&operator= (char c);

Мысалы:

string s(“class”);

s1=s;

s1=“class”;

string класының функциялары: қатардың бөлігін қосу және меншіктеу, қатарларды түрлендіру, ішкі қатарды іздеу, қатардың бөліктерін салыстыру.

 

2.Қатардың  бөлігін қосу және меншіктеу

Бір қатардың бөлігін  екінші қатарға меншіктеу үшін  assign функциясы қолданылады:

assign (const string&str);

assign (const string&str, size_type pos, size_type n);

assign (const char*s, size_type n);

Мысалы:

string s1(“telefon”), s2(“olar”);

s1.assign (s2); // нәтижесі:olar

s1.assign (s2, 1, 3); // нәтижесі: lar

  Бір қатардың бөлігін екінші қатарға қосу үшін  append функциясы қолданылады:

append (const string&str);

append(const string&str, size_type pos, size_type n);

append (const char*s, size_type n);

Мысалы:

string s1(“fon”), s2(“dar”);

s1.append (s2); // нәтижесі:fondar

s1.append (s2, 1, 2); // нәтижесі: fonar

3. Қатарларды түрлендіру

Бір қатардың бөлігін  екіншісіне қою (вставка) үшін insert  функциясы қолданылады:

 insert (size_type pos1, const string&str);

insert (size_type pos1, const string&str, size_type pos2, size_type n);

insert (size_type pos, const char*s, size_type n);

Қатардың бөлігін жою үшін erase функциясы қолданылады:

 erase (size_type pos=0, size_type n=npos);

 Ол pos позициясынан бастап шақырылған қатардың n элементін жояды. Егер позиция көрсетілмесе, онда қатардың басынан бастап жояды.

Бүкіл қатарды тазалау  қызметін  clear  функциясы атқарады:

void clear();

 Қатардың бөлігін ауыстыру (замена) үшін replace функциясы қолданылады:

replace (size_type pos1, size_type n1, const string&str);

replace (size_type pos1, size_type n1, const string&str, size_type pos2, size_type n2);

replace (size_type pos1, size_type n1, const char*s, size_type n2);

Екі қатарды бір-бірімен алмастыру  үшін swap функциясы қолданылады:

swap (string&s);

Қатардың бөлігін бөліп алу (выделения) үшін substr функциясы қолданылады:

 string substr (size_type pos=0, size_type n=npos) const;

string типті объектілерді ескі стильдегі қатарға түрлендіру үшін c_str функциясы қолданылады: 

const char*c_str() const;

Жоғарыдағы функцияларды қолдануға  арналған мысал:

#include <string>

#include <iostream>

using namespace std;

int main () {

string s1(“uzdik okushy”), s2(“torlar”), s3(“shyt”);

cout<<“s1: ”<<s1<<endl;

cout<<“s2: ”<<s2<<endl;

cout<<“s3: ”<<s3<<endl;

// insert функциясын қолдану:

cout<<“insert-ten kein: ”<<endl;

cout<<“s1: ”<<s1.insert(8, s3, 2, 2)<< endl;

//erase функциясын қолдану:

s1.erase(0,2);

s1.erase(1,3);

cout<<“erase-den kein: ”<<endl;

cout<<“s1: ”<<s1.erase(2,5)<< endl;

// append функциясын қолдану:

cout<<“append-ten kein: ”<<endl;

cout<<“s1: ”<<s1.append(s2)<< endl;

}

Нәтижесі:

insert-ten kein: uzdik okytushy

erase-den kein: dok

append-ten kein: doktorlar

4. Қатардың құрамын  іздеу

  Қатардың құрамын (подстрока) іздеу үшін бірнеше функциялар қарастырылған. Төменде негізгілері келтірілген:

size_type find(const string&str, size_type pos=0) const;

Шақырылған қатардан pos позициясынан бастап str қатарының сол жақтан енуін іздейді және егер қатар табылмаса, онда қатардың позициясын немесе npos-ны қайтарады.

size_type find(char c, size_type pos=0) const;

Шақырылған қатардан pos позициясынан бастап с символының сол жақтан енуін іздейді және егер қатар табылмаса, онда қатардың позициясын немесе npos-ны қайтарады.

size_type rfind(const string&str, size_type pos=npos) const;

Шақырылған қатардан pos позициясына дейін str қатарының оң жақтан енуін іздейді және егер қатар табылмаса, онда қатардың позициясын немесе npos-ны қайтарады.

size_type rfind(char c, size_type pos=npos) const;

Шақырылған қатардан pos позициясына дейін с символының оң жақтан енуін іздейді және егер қатар табылмаса, онда қатардың позициясын немесе npos-ны қайтарады.

size_type find_first_of(const string&str, size_type pos=0) const;

Шақырылған қатардан pos позициясынан бастап str қатарының кез-келген символының сол жақтан енуін іздейді және егер ену табылмаса, онда символдың позициясын немесе npos-ны қайтарады.

size_type find_first_of(char c, size_type pos=0) const;

Шақырылған қатардан pos позициясынан бастап с символының сол жақтан енуін іздейді және егер ену табылмаса, онда символдың позициясын немесе npos-ны қайтарады.

size_type find_last_of(const string&str, size_type pos=npos) const;

Шақырылған қатардан pos позициясынан бастап str қатарының кез-келген символының оң жақтан енуін іздейді және егер ену табылмаса, онда символдың позициясын немесе npos-ны қайтарады.

size_type find_last_of(char c, size_type pos=npos) const;

Шақырылған қатардан pos позициясынан бастап с символының оң жақтан енуін іздейді және егер ену табылмаса, онда символдың позициясын немесе npos-ны қайтарады

size_type find_first_of(const string&str, size_type pos=0) const;

 pos позициясынан бастап шақырылған қатардың символымен str қатарының бірде-бір символы сәйкес келмейтін  сол жақ позициясын іздейді.

size_type find_first_of(char c, size_type pos=0) const;

 pos позициясынан бастап шақырылған қатардың символымен c символының  сәйкес келмейтін  сол жақ позициясын іздейді

size_type find_last_of(const string&str, size_type pos=npos) const;

 pos позициясынан дейін шақырылған қатардың символымен str қатарының бірде-бір символы сәйкес келмейтін  оң жақ позициясын іздейді.

size_type find_last_of(char c, size_type pos=npos) const;

 pos позициясына дейін шақырылған қатардың символымен c символының  сәйкес келмейтін  оң жақ позициясын іздейді.

Жоғарыдағы функцияларды қолдануға  арналған мысал:

#include <string>

#include <iostream>

using namespace std;

int main () {

string s1(“kurstagy okushy”), s2(“ku”);

cout<<“s1: ”<<s1<<endl;

cout<<“s2: ”<<s2<<endl;

int i=s1.find(s2);

int j=s1.rfind(s2);

cout<<“s1-degi birinshi s2: ”<<i<<endl;

cout<<“s1-degi songy  s2: ”<<j<<endl;

cout<<“s1-degi birinshi ‘y’:” <<s1.find(‘y’)<<endl;

cout<<“s1-degi songy ‘y’: ”<<s1.rfind(‘y’)<<endl;

cout<<“s1-degi birinshi :” <<s1.find_first_of(‘stuv’)<<endl;

cout<<“s1-degi songy : ”<<s1.rfind_last_of(‘stuv’)<<endl;

}

Нәтижесі:

s1-degi birinshi s2:  0

s1-degi songy  s2:   9

s1-degi birinshi ‘y’:”  7

s1-degi songy ‘y’:   14

s1-degi birinshi:  3

s1-degi songy:  12

5.Қатардың  бөліктерін салыстыру

Қатардың бөліктерін салыстыру үшін

compare  функциясы қолданылады.

 int compare (const string&str) const;

int compare(size_type pos1, size_type n1, const string&str) const;

int compare(size_type pos1, size_type n1, const string&str, size_type pos2, size_type n2 ) const;

 

5лекция

Деструкторлар. Класстың достық функциялары. Класс шаблондары.

Қарастырылатын сұрақтар:

  1. Дестукторлар
  2. Класстың статикалық мүшелері
  3. this нұсқауышы
  4. Класстың достық функциялары
  5. Класс шаблондары

Деструкторлар

Деструктор  – бұл берілген класстың нақты  объектілерімен байланысқан ресурстарды  босату үшін қолданылатын арнайы функция-мүшелер. Дестукторлар класс объектілерін автоматты түрде бұзады (разрушение). Деструктор ~ белгісінен басталады.

Форматы:

class className

{  public:

   className(); // үнсіздік бойынша конструктор

   // басқа  конструкторлар

   ~className();         // деструкторды хабарлау

   // басқа  функция-мүшелер

};  

Мысалы:

class String

{

protected:

   char *str;

   int len;

public:

   String();

   String(const String& s);

   ~String();

   // басқа функция-мүшелер

};  

Деструкторлардың ерекшеліктері:

    • дестукторлар мәнді қайтармайды ( void типін де) және олардың формальды параметрлері болмайды;
    • дестукторлар қайта жүктелінетін функция бола алмайды;
    • дестукторлардың функциясының аты:

  ~класс _аты;

    • дестукторлар объектілерді жою кезінде шақырылады;
    • егер деструкторды программада бермейтін болсақ, онда оны программаның өзі шақырады.

 

Мысалы: қатарлардың бір байланысты тізімін таратушы Tbl класы. Tbl класының конструкторлары мен деструкторларын анықтау

#include <iostream.h>

#include <string.h>

class Tbl {

public:

Tbl(const Tbl&);

Tbl(const char* );

Tbl(int=32);    // үнсіздік параметрлі конструктор

~Tbl();

void print() const;

private:

char *name;

int sz, len;

};

 

void Tbl::print()const { // тұрақты функция-мүше

cout.width(2);

cout<<dec

    <<" SZ=="<<sz

    <<" LEN=="<<len

    <<" NAME=\""<<name<<"\" ptr=="<<hex<<int(name)<<endl;

}

 

Tbl::Tbl(const char *str) {

sz=len=strlen(str);

name = new char [++sz];

strcpy(name,str);

}

Tbl::Tbl(int size) {// үнсіздік параметрлі конструктор

sz   = size;

len  = 0;

name = new char [sz];

memset(name,0,sz);

//N++;

}

 

Tbl::Tbl(const Tbl& t) {  //иниц-я кезіндегі көшіру К.  sz   = t.sz;

len  = t.len;

name = new char [sz];

strcpy(name,t.name);

}

 

Tbl::~Tbl() {

cout<<dec

    <<"delete sz=="<<sz

    <<" len=="<<len<<endl;

delete [] name; // ресурстарды босату

}

int main() {

Tbl t1("Time"), // Будет вызвана Tbl::Tbl(const char *str)

t2(8), // Будет вызвана Tbl::Tbl(int size)

t3;    // Будет вызвана Tbl::Tbl(int size), size==32

t3.print();

 

Tbl t4=t1; // Будет вызвана Tbl::Tbl(const Tbl& t)

t4.print();

 

return 0;

}

Нәтижесі:

SZ==5  LEN==4 NAME="Time" ptr==770870

SZ==8  LEN==0 NAME=""     ptr==7708a0

SZ==32 LEN==0 NAME=""     ptr==7708d0

SZ==5  LEN==4 NAME="Time" ptr==770920

delete sz==5  len==4

delete sz==32 len==0

delete sz==8  len==0

delete sz==5  len==4

Деструкторлар объектілердің пайда  болу ретіне кері ретпен

t1.print();

t2.print();

шақырылады, яғни

                                                 t4, t3, t2   t1

Класстың статикалық мүшелері

Класстың статикалық мәлімет-мүшелері тек ғана бір данада (экземпляр) болады. Статикалық мәлімет-мүшелерге енудің барлық ережелері қолданылады:

    • статикалық мәлімет-мүшелер әр объектіден жеке сақталынады;
    • берілген класстың объектілерін анықтау алдында статикалық мәлімет-мүшелер көрінудің ауқымды аймағында инициализацияланған болуы тиіс. 

Мысалы:  Tbl класына объектілер санауышын қосу

 class Tbl {

public:

// ...

static int getN() const {return N;}

private:

// ...

static int N;

};

Tbl::Tbl(const char *str) {

// ...

N++;

}

int Tbl::N=0;

int main() {

Tbl t1("Time"), t2(8), t3;

 

Информация о работе С++ тілінің базалық жабдықтары