Thursday, December 10, 2020

Switching from C to C++(Design thinking)

data:image/jpeg;base64,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

           If you are some one who has already worked using C and find it difficult learning or using C++ in your design. following tips will be helpful to get the bigger picture difference between them.I have covered only the generic part  C++ in comparison to the C.I have not included some of the advanced features of C++  that can be directly compared with C.you need basic programming and C++ knowledge to follow the below explanation.

Objects and Data

   start seeing everything as objects that's why its called an Object oriented programming language.objects are different in understanding from a class, which is nothing but the blueprint of the object.object occupy memory and class will say how the memory of the object will look like.

objects are nothing but a shell with tightly coupled data and functions which can manipulate the data. an object can have another object as data(rather an explicit data without any hierarchical connections).

class A{
    int data;
}
class B{
    A a; 
    int data;
}

Dynamic & Static memory 

                         C++ relies heavily on the heap memory and use dynamic memory more compared to C. objects can be instantiated in function local stack or dynamically at runtime in heap or also statically.in C almost all the data becomes available form the start of the program, unless you have a pointer allocated by malloc() or calloc().in C all data's are initialized based on the location they fall in the memory organization. static data member and the respective static functions which manipulates this data are available from the start of the program. they can be used even before the object is available, so static member function can never access a non-static member data.

Understanding Object Life  

     C++ provides the entry(when instantiated) and exit(destroyed) points for an object. even if the object is statically declared these entry points are applicable.these are called as constructors and destructors respectively.constructor play a significant role is preparing and initializing the data before it becomes alive. destructor  is used to release any dynamic memory allocated in the constructor.

                    the constructor can be overloaded to create different entry points which is useful only if you are creating  the object at run time.

Relating an Object to a File in C

      a C program file can be compared to a class file statically instantiated to an object and available from the start of the program. all statically allocated data are private and global data is public, similarly the functions in the same file. C++ has name space which allows same name for data across class and the same is not possible with the C files.

file_A.cpp                                                                           file_A.c

class A{                

        int data_private1;                                          static int data_private1;

        static int data_private2;                                int data_public1;

        void fun_private1();                                       static int func_private1(void);

        static void fun_private1();                             int func_public1(void);

public:                                                                 

        int data_public1;

        static int data_public2;

        void fun_public1(void); 

        static void fun_public2(void);

}

Object Instances and Hierarchy of Classes(inheritance)

           in C++ multiple instance of an object can be created at runtime or statically or local to a function. even though there may be many instances of the object, they are still the same data whose memory is allocated separately for each instance and manipulated by the same member function using the instance(this->refers the object data).

inheritance allows creating an object encompassing another one or more objects and have a hierarchical relationship with them.

                         

            The diagram represents the class inheritance hierarchy. class C and D inherited by  class B and Class B inherited by Class A. This allows the objects to be polymorphic behavior, we can refer this object as an object of class C or D or B or A at runtime in the program. member functions can be overloaded in the hierarchy and by making the member function virtual in relative base classes the polymorphic behavior can  be achieved. Say a virtual member function in base class C can be overridden by the the member functions in derived classes even when the derived object is referred as C.  


Class C{
virtual virtual_member_func(){
/*Implementation*/
}
}

Class A:public B{
virtual_member_func(){
/*Implementation*/
}
}

A objectA;

C objectC;

C * objectCP = &A;

objectP->virtual_member_func(); //overloaded function in class A called

objectC.virtual_member_func();//Class C member function called


Templates

    Templates is a powerful feature in C++ allowing function and classes to act as templates .This allows functions and member function of objects  to be reusable across all data types. The data type can be from a primitive one to even a complex template class.

Standard Template Libraries(STL)

         STL's are libraries based on Templates helping run different algorithms and logic's using complex data types.

Monday, December 7, 2020

Using std::async in C++

/*
* aysn_test.cpp
*
*/
#include <iostream>
#include <algorithm>
#include <future>

using namespace std;

struct X{
void thread_func(int o){
cout<< "thread func " <<o <<endl;
}
};
int thread_func(int o){
cout<< "thread func " <<o <<endl;
return 100+o;
}
int main(){

X x;

/**
* synchronous call -> next line will not be executed untill
* the thread function is executed. so "thread func 1" will be printed
* first followed by "after ->async(thread_func,1)"
**/
auto a = async(&X::thread_func,&x,1);
cout<< "after ->async(thread_func,1)" <<endl;

/**
* asynchronous call -> next line will be executed mostly even before
* the thread function is executed. so "thread func 2" will be printed
* after "after ->async(std::launch::async,thread_func,2)"
*
* a1.get() will get the returned value of the thread, if the thread
* function has not been scheduled it will wait until the thread is
* scheduled and thevalue is returned
**/
auto a1 = async(std::launch::async,thread_func,2);
cout<< "after ->async(std::launch::async,thread_func,2)" <<endl;
std::cout << a1.get() << '\n';

/**
* asynchronous call -> next line will be executed mostly even before
* the thread function is executed. so "thread func 3" will be printed
* only after "after ->async(std::launch::deferred,thread_func,3"
*
* thread function will be scheduled only after a2.wait() or a2.get()
* is called. so to schedule and get the return value wait() or get()
* has to be called otherwise thread will never be executed(thats why
* its lazy evaluation)
**/
auto a2 = async(std::launch::deferred,thread_func,3);
cout<< "after ->async(std::launch::deferred,thread_func,3)" <<endl;

//a2.wait();
//std::cout << a2.get() << '\n';;

}

compile command in linux
"g++ aysn_test.cpp -lpthread"

Output::
after ->async(thread_func,1)
thread func 1
after ->async(std::launch::async,thread_func,2)
thread func 2
102
after ->async(std::launch::deferred,thread_func,3)
thread func 2 ----a2.wait() or std::cout << a2.get() << '\n';;
103 ----std::cout << a2.get() << '\n';;

Simple dlopen-example

        A simple sample for checking whether a .so in Linux both dynamically linked & dynamically loaded-linked in a process will share ...