|
|
COMPUTER | |
| |
||
|
C Core
|
||
Functions (Methods) Declaration Overview
|
Feature |
Description |
|
default parameters |
You can initialize a function parameter with a default value. void MyFun(int Param1, int Param2=1, int Param3=4); After that you can have variable number of parameters. void MyFun(10); |
|
overloading (polymorphism) |
More functions with the same name - must differ in number or type of parameters. int MyFun(int x, int y); float MyFun(float x, float y, float z); |
|
const |
Const function == read-only == you promise no change for member data. int GetAge() const{ return(itsAge); } |
|
init members |
The constructor can have the initialization stage for data members. Cat(int age,int weight):catAge(age), catWeight(weight) {} |
|
copy constructor |
Copy constructor is called by object copying during another object creating. Cat(const Cat & rhs){...} // definition Cat Johny(Friskie); // calls COPY CONSTRUCTOR |
Operators Overloading Overview
|
Feature |
Description |
|
operator overloading |
When you overload operators (=, +, [], ...), you can use them directly with class. Cat & operator=(const Cat & rhs){ ... } Counter operator+ (const Counter & rhs) { ... }; //"+" char & operator[](unsigned short offset); // write data char operator[](unsigned short offset) const; //READ-ONLY const Counter & operator++ () { ... } // PREFIX ++ const Counter operator++ (int) { ... } // POSTFIX ++ |
|
conversion operator |
Conversion between class data member <-> fundamental types (int, char, ...) // class_member <- int - constructor with init Counter(int initVal):countVal(initVal){ }; // definition Counter count1 = 4; // call // int <- class_member - operator int() operator int(){ return countVal; }; // definition int x = count1; |
Pointers, References, Arrays Overview
|
Feature |
Description |
|
array |
Array of objects: Cat CatArray[5]; // definition - constructor called 5 x CatArray[0].GetAge(); // class access |
|
Feature |
Description |
|
new, delete |
Allocates / frees memory for object. // --- Pointer to Object --- Cat * pCat = new Cat(5); // 1 Cat, CONSTRUCTOR with init if (pCat==NULL) ... // successful memory allocation test pCat->SetAge(1); // function call delete pCat; // 1 Cat, DESTRUCTOR call pCat=NULL; // wild pointer protection |
// --- Pointer to ARRAY of Objects --- //4 x Cat, 4 x default CONSTRUCTOR call, NOT ALLOWED INIT Cat * paCat = new Cat[4]; paCat[0].SetAge(2); // function call - pointer to array delete [] paCat; // 4 x Cat, 4 x DESTRUCTOR call |
|
// --- ARRAY of Pointers to Object --- // NO memory allocation, NO CONSTRUCTOR call Cat * paaCat[4]; //4 x Cat, 4 x CONSTRUCTOR with INIT call for (xp=0;xp<4;++xp) paaCat[xp] = new Cat(1); paaCat[0]->SetAge(3); // function call - array of pointers // 4 x Cat, 4 x DESTRUCTOR call for (xp=0;xp<4;++xp) delete paaCat[xp]; |
|
|
this |
this pointer points to object from its inside (also when the object isn't created by new).int GetAge() const { return this->catAge; } |
|
& (reference) |
Symbolic name with the same memory address as the target. int X; int & refX = X; // reference to variable X |
Derivation (Inheritance) Overview
|
Feature |
Description |
|
derivation (inheritance) |
The derived class inherits the functionality of the base class.
class Cat : public Mammal // DERIVATION
Cat::Cat():Mammal(), ... // explicit constructor call
Cat Friskie; // Mammal constructor(own memory part)
// Cat constructor
/* out of scope */ // Cat destructor
// Mammal destructor
|
|
virtual ,overriding |
Virtual function - a function in a base class that you expect to be overrided. The used variable must be a pointer or a reference! The destructor must be virtual too! Overrided function - a function in a derived class with the same name and the head as a function in a base class. // Base_class - virtual function definition virtual void Function1(); // Derived_class - function overriding void Function1(); // Using: pointer definition Base_class * pBase_class = new Derived_class; // Using: calls Derived_class.Function1() pBase_class->Function1(); |
Controlling Access to Class Members - PRIVATE, PROTECTED, PUBLIC
|
Type of Access |
Access allowed for: |
|
private |
internal member functions, friends |
|
protected |
internal member functions, friends, derived class |
|
public |
any function |
Controlling Access through Derivation - PRIVATE, PROTECTED, PUBLIC
|
Member Access in Base Class |
Derivation Type |
Access from derived class: |
|
private |
no matter |
always inaccessible |
|
protected |
private |
private |
|
protected |
protected |
|
|
public |
protected |
|
|
public |
private |
private (next derivation - NO ACCESS) |
|
protected |
protected |
|
|
public |
public |
|
Feature |
Description |
|
qualified call |
Fully qualifying calling: object_name.base_class_name::function_name(); Friskie.Mammal::Sound(); // object pFriskie->Mammal::Sound(); // pointer |
|
Abstract Data Type (ADT) |
A base, abstract concept class. Not allowed to make an object! Changing a class to ADT - use pure virtual function. All pure virtual functions must be overridden (or you will have an ADT again)! virtual void Run() = 0 { } // pure virtual function |
|
static members |
A static member is one per class, belongs to the class not to the object. Static member functions have access only to a static member variables! // Static Member Data static int XCats; // declaration - no memory allocation int Cat::XCats = 0; // definition - memory allocation i = Cat::XCats; // using - class::static_data // Static Member Function static int GetHowMany() { return XCats; } i = Cat::GetHowMany(); // call - without object |
|
friend class
friend function |
A friend class definition - your private data access establishing.
class C10
{
friend class C20;
friend void C20::C21public();
|
class Cat : public Mammal // DERIVATION
{
public: // --- PUBLIC members ----------------------------------------
// --- CONSTRUCTORS part ------------
Cat():itsAge(1){ } // default CONSTRUCTOR
Cat(int initAge):itsAge(initAge){ } // CONSTRUCTOR with init part
Cat(const Cat & rhs); // COPY CONSTRUCTOR
~Cat(){} // DESTRUCTOR
// --- OPERATORS OVERLOADING part ---------------
Cat & operator=(const Cat & rhs)
{ itsAge = rhs.GetAge(); return *this; } // = operator overloading
operator int(){ return(itsAge); }; // Conversion operator
// --- ACCESSORS part ---------------
int GetAge() const{ return(itsAge); } // ACCESSOR function (function)
void SetAge(int newAge) { itsAge = newAge; }
// --- Other functions part -----------
virtual void Speak()const{ } // Virtual function
virtual void Run() = 0 { } // Pure Virtual function
protected:
private: // --- PRIVATE members ---------------------------------------
int itsAge; // private data
static int HowManyCats; // static member data declaration
};
int Cat::HowManyCats = 0; // definition
//***************************************************
// Copy Constructor - function definition
//***************************************************
Cat::Cat(const Cat & rhs)
{
itsAge = rhs.GetAge();
}
//*********************************
// ClassTest - class functions test
//*********************************
void ClassTest()
{
Cat Friskie(3); // calls CONSTRUCTOR with init
Cat Johny(Friskie); // calls COPY CONSTRUCTOR
Cat Sammy = Friskie; // calls COPY CONSTRUCTOR variant 2
// without Copy Constructor declaration - calls default
// Copy Constructor == hard copy 1:1
Johny.SetAge(5); // calls function
Friskie = Johny; // call = Equal operator overloading
// without Equal operator overloading - calls default
// Equal operator == hard copy 1:1
} // end of scope - calls DESTRUCTORs