basic concepts of oop in c++
Post on 31-Dec-2015
37 Views
Preview:
DESCRIPTION
TRANSCRIPT
Basic Concepts of OOP in C++
Darvay Zsolt
C++ 2
Outline
The namespace and its members The using declaration and directive The address operator and the
reference type The scope operator The type identifier operator Comparison of simle Java and C++
codes
C++ 3
Outline
Data protection using modular programming in C
Abstract Data Types Classes
C++ 4
The Namespace and its Members
The namespace concept Example Accessing the members of the
namespace
C++ 5
The Namespace Concept
With a namespace one can attain the grouping of some declarations.
The names which are interconnected to each other will belong to the same namespace.
The definition of a namespace:namespace name {
// declarations, definitions}
C++ 6
Example
#include <iostream>namespace MyVector {
int *elem;int dim;void Init(int *e, int d);void FreeVect();void SquareVect();void Display();
}
A vector namespace with integer elements
C++ 7
Accessing the Members of the Namespace
We use the scope ( :: ) operator. Accessing: namespace_name::member. Example: MyVector::dim = 6; This is valid also for functions. We use
the form namespace_name::function. Simple access with the using declaration
and directive.
C++ 8
The using Declaration
To access more then one time a member: using declaration
The declaration:using namespace_name::member;
Example: using MyVector::dim; Then dim = 14;
is the same as MyVector::dim = 14;.
C++ 9
The using Directive
Simple access of all members Form:using namespace namespace_name;
Example: using namespace MyVector;
The global using directives are used for compatibility issues with older C++ versions.
C++ 10
The iostream Header File
//with using directive
#include <iostream>using namespace std;void Print() {...cout << endl;}
//without using directive
#include <iostream>void Print() {...std::cout <<
std::endl;}
C++ 11
The Init function
void MyVector::Init(int *e, int d){
elem = new int[d];dim = d;for(int i=0; i < dim; i++)
elem[i] = e[i];}
C++ 12
The FreeVect and SquareVect functions
void MyVector:: FreeVect() {delete []elem;
}void MyVector:: SquareVect() {
for(int i = 0; i < dim; i++)elem[i] *= elem[i];
}
C++ 13
The Display function
void MyVector::Display() {for(int i = 0; i < dim; i++)
std::cout << elem[i] << '\t';std::cout << std::endl;
} If the using namespace std;
directive is present, then std:: can be dropped.
C++ 14
The main function
int main() {int t[]={11, 22, 33, 44};using namespace MyVector;Init(t, 4); // if there is no using, then
// MyVector::InitSquareVect();Display();FreeVect();
}
C++ 15
The Address Operator and the Reference Type
Address operator (C and C++):& expression
where expression must be a modifiable lvalue.
In C this operator is often used when calling the scanf function.
C++ 16
Reference Type (C++)
In other words: alias name. We use the address operator Two variants:
type & name = data; or
type & formal_parameter type & is a new type (reference type).
C++ 17
Example (Reference Type)
int main() {int x[4] = {10, 20, 30, 40};int& y = x[0]; // y and x[0] are the sameint* z = x; // *z and x[0] are the samey = 50; // y, x[0] and *z changes*z = 60; // y, x[0] and *z changes
}
C++ 18
The Scope Operator
Possible forms:classname :: membernamespacename :: member:: name:: qualified_name
global scope
C++ 19
Global Scope
Use it to access the global variables. Example:
int x = 100;int main() {
char x = ’Z’;cout << x << endl; // local (character: ’Z’ )cout << ::x << endl; // global (integer: 100)
}
C++ 20
Example 2
#include <iostream>using namespace std;namespace X {
int x_var;namespace Y {
int x_var;}
}double x_var = 5.25;
Y: embedded namespace
global variable
C++ 21
Example 2 (main function)
int main() {char x_var = 'A';X::x_var = 10; // from the X namespaceX::Y::x_var = 20; // Y::x_var qualified namecout << x_var << endl; // local ('A’)cout << X::x_var << endl; // 10cout << ::x_var << endl; // global (5.25)cout << X::Y::x_var << endl; // 20
}
C++ 22
The Type Identifier Operator
typeid operator:typeid(typename)
ortypeid(expression)
Returns an object, which makes possible to find out the type of an expression in running time.
C++ 23
Using the typeid Operator
#include <iostream>#include <typeinfo.h>using namespace std;int main() {
cout << typeid( 97 ).name() << endl;cout << typeid( 97.0 ).name() << endl;cout << typeid( 97.0f ).name() << endl;cout << typeid( 'a' ).name() << endl;cout << typeid( static_cast<int>('a') ).name() << endl;
}
C++ 24
Output
intdoublefloatcharint We need the typeinfo.h header file in
case of using the typeid operator.
C++ 25
Simple Code in C++
#include <iostream>using namespace std;int main(){
cout << "Hello" << endl;}
C++ 26
Simple Code in Java
public class Hello { public static void main(String[] args)
{ System.out.println("Hello"); }}
C++ 27
Comparison
In Java there is no include or namespace (include and import are different).
In C++ main is a function, not a method. The list of formal parameters can be empty, if
we don’t want to use them. In C++ we use streams for input/output
opertations. The << (insertion) operator can be used with the standard cout object.
In Java the name of the public class must be the same as the file name. In C++ there is no such restriction.
C++ 28
Comparison
The string literals are written in the same way, but the type of "Hello"
in C++ is const char[6] in Java is an object of type String,
and thus it is composed of unicode characters.
C++ 29
Many Similarities
Comments Identifiers Keywords Literals
C++ 30
Java String and C++ string
We compare the Java String object with the C++ string “almost container”.
Differences: Java stores unicode, and C++ ASCII
characters the Java String is immutable in Java the concatenation (+) operator can
be used for each object, but in C++ only for two strings.
C++ 31
Java String and C++ string
For a C++ string object we can use the following operators: == != < > <= >=
In Javaban we use methods: equals, compareTo.
Substring: in C++ substr, and in Java substring.
C++ 32
Data Protection Using Modular Programming in C
We use static variables declared outside of functions.
One file contains all the data and the relevant code.
In the other file we can access the functions.
C++ 33
A Vector Module
Two files: MyVector.cpp MyMain.cpp
The two files must be in the same project.
C++ 34
MyVector.cpp
#include <iostream>using namespace std;
static int* elem;static int dim;
C++ 35
The Init function
void Init(int *e, int d){
elem = new int[d];dim = d;for(int i=0; i < dim; i++)
elem[i] = e[i];}
C++ 36
The FreeVect and SquareVect functions
void FreeVect() {delete []elem;
}
void SquareVect() {for(int i = 0; i < dim; i++)
elem[i] *= elem[i];}
C++ 37
The Display function
void Display() {for(int i = 0; i < dim; i++)
cout << elem[i] << '\t';cout << endl;
}
C++ 38
MyMain.cpp
void Init(int *, int );void FreeVect();void SquareVect();void Display();
//extern int * elem;
C++ 39
The main function
int main() {int t[]={1, 2, 3, 4};Init(t, 4);SquareVect();//elem[1] = 100;Display();FreeVect();
}
C++ 40
Abstract Data Type
A structure with data and codestruct name {
// data// code
};
data membersmember functions
C++ 41
ADT
The declaration of member functions will be inside the structure, and the definition outside.
If the whole definition is inside, then the function will be inline (evaluates like a macro)
C++ 42
ADT MyVector
struct MyVector {int *elem;int dim;void Init(int *e, int d);void FreeVect();void SquareVect();void Display();
};
data members
member functions
C++ 43
Member function definitions
Definition of member functions just like in the case of namespaces.
C++ 44
The main function
int main() {int t[]={1, 3, 5, 7};MyVector v;v.Init(t, 4);v.SquareVect();v.elem[1] = 100; // no protectionv.Display();v.FreeVect();
}
C++ 45
The MyVector class
class MyVector {private:
int *elem;int dim;
public:MyVector(int *e, int d);~MyVector();void SquareVect();void Display();
};
C++ 46
Constructor
MyVector::MyVector(int *e, int d){
elem = new int[d];dim = d;for(int i=0; i < dim; i++)
elem[i] = e[i];}
C++ 47
Destructor
MyVector::~MyVector() {delete []elem;
}
C++ 48
The SquareVect and Display functions
void MyVector:: SquareVect() {for(int i = 0; i < dim; i++)
elem[i] *= elem[i];}
void MyVector::Display() {for(int i = 0; i < dim; i++)
cout << elem[i] << '\t';cout << endl;
}
C++ 49
The main function
int main() {int t[]={2, 4, 6, 8};MyVector v(t, 4);v.SquareVect();//v.elem[1] = 100;v.Display();
}
top related