basic concepts of oop in c++
DESCRIPTION
Basic Concepts of OOP in C++. A Comparison of C++ and Java. Darvay Zsolt. 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. Outline. - PowerPoint PPT PresentationTRANSCRIPT
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();
}