Автор: Пользователь скрыл имя, 11 Февраля 2013 в 11:06, лекция
С++ тілінің базалық жабдықтары. Программа құрылымы. Жиымдар
Қарастырылатын сұрақтар:
1. С++ тілінің базалық жабдықтары
2. Мәліметтер типі
3. Программа құрылымы
4. Айнымалылар мен өрнектер
5. Тармақталу, басқаруды беру операторлары және циклдік операторлар
6. Жиымдар (массивтер)
Көшіру конструкторы- бұл класстың объектісіне нұсқауыштың жалғыз параметрі ретінде алынатын конструктордың арнайы түрі.
Берілу форматы:
T::T(const T&) {конструктор денесі},
мұндағы Т-конструктор аты.
Жаңа объект бар объектіні көшіру арқылы алынатын болса, онда көшіру конструкторы шақырылады.
4лекция
Конструкторлар және қатарларды меншіктеу. string класындағы функциялар
Қарастырылатын сұрақтар:
Қатар - нөл-символмен аяқталатын символдар массиві. С++-те қатармен жұмыс істеудің екі мүмкіндігі бар: С библиотекасынан (<string.h> немесе <cstring>) мұрагерлікке қалған функциялар және С++-тің string библиотекалық класы. С-дан мұрагерлікке қалған функциялар қолдану кезінде ыңғайсыз және қауіпті, себебі олар қатардың шекарадан шығып кетуін қадағаламайды.
string типті қатары ақпараттың шекарадан шығып кетуінен қорғалған және операциялар көмегімен жұмыс істеуге болады
Қатармен жұмыс істеудің негізгі ерекшеліктері мен тәсілдерін қарастырайық.
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’)<<
cout<<“s1-degi songy : ”<<s1.rfind_last_of(‘stuv’)<<
}
Нәтижесі:
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лекция
Деструкторлар. Класстың достық функциялары. Класс шаблондары.
Қарастырылатын сұрақтар:
Деструкторлар
Деструктор – бұл берілген класстың нақты объектілерімен байланысқан ресурстарды босату үшін қолданылатын арнайы функция-мүшелер. Дестукторлар класс объектілерін автоматты түрде бұзады (разрушение). Деструктор ~ белгісінен басталады.
Форматы:
class className
{ public:
className(); // үнсіздік бойынша конструктор
// басқа конструкторлар
~className(); // деструкторды хабарлау
// басқа функция-мүшелер
};
Мысалы:
class String
{
protected:
char *str;
int len;
public:
String();
String(const String& s);
~String();
// басқа функция-мүшелер
};
Деструкторлардың
~класс _аты;
Мысалы: қатарлардың бір байланысты тізімін таратушы 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();
шақырылады, яғни
Класстың статикалық мүшелері
Класстың статикалық мәлімет-мүшелері тек ғана бір данада (экземпляр) болады. Статикалық мәлімет-мүшелерге енудің барлық ережелері қолданылады:
Мысалы: 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;