You are on page 1of 2

декларираме класът и неговите методи в header файла, а неговите функции ги

реализираме в .cpp файла


Разлика между "\n" и endl"
std::cout<<"\n";
std::coout<<std::endl;"
endl - флъшва буфера, което взима съвсем малко повече процесорно време

Подаването на параметри на функция,метод става по два начина:


-подаване по стойност, call by value, като функцията взима стойността и промени
направени на тази променлива във функцията не се отразяват -НЕЕФЕКТИВНО
-подаване по референция, call by reference, функцията получава
указател(pointer)/референция(reference) и промените по подаденият параметър се
отразяват- ЕФЕКТИВНО

Конструктур може да инициализира променливи, който принадлежат само на неговият


клас. Защото иначе при наличие на статична променлива,
base класът ще я инициализира първи с неговият конструктур и след това derived
класът ще я инециализира, чрез неговият конструктур

References:
една променлива декларирана, като референция става огледало на променливата, за
която е декларирана
int x=0;
int %ref=x;
ref=20;
cout << "x = " << x << '\n'; //printira 20
x=30;
cout << "x = " << ref << '\n'; //printira 30
References могат да се ползват за:
1.модификация на подадените параметри, например за swap функция
void swap(int& a,int& b){
int temp=a;
a=b;
b=temp;
}
int main(){
swap(a,b);
}
2.За избягване на копиране/създаване на големи структури. Например, когато имаме
функция и подадем параметър по стойност(call by value),
компилаторът ще направи копие на променливата, което е неефективно. Затова
подаваме референция, което е по ефективно
3.За for each loop има приложения. //да допълня по-късно

Initializer List използва се за:


1.инициализиране на const data members
2.за инициализиране на reference members
3.ЗА ИЗВИКВАНЕ НА PARAMETERIZED CONSTRUCTOR OF THE BASE CLASS. Това е единственият
начин за извикване на конструктурът на родителският клас

:: - scope resolution operator


използва се за:
1. За достъп до глобална променлива, когато има локална променлива със същото име
2. За дефиниране на функция, която е извън класът си (както когата имаме
декларираме/дефинираме клас в два файла )
3.За достъп до статични променливи на клас
4. За разграничаване на еднакви по имена променливи от различни класове :
cout << "A's x is " << A::x;
cout << "\nB's x is " << B::x;
5. За namespace
6. За достъп до nested class, клас в класът, като: int outside::inside::y = 5; и
структурата на класовете е следната:
class outside
{
public:
int x;
class inside
{
public:
int x;
static int y;
int foo();

};
};

когато имаме pure virtual метод в клас, това значи че класът е абстрактен. Pure
virtual означава, че метода е равен на 0 . virtual void print()=0; и
компилатора не ни дава да пишем тяло на метода
https://www.geeksforgeeks.org/difference-between-virtual-function-and-pure-virtual-
function-in-c/

You might also like