Thursday, February 28, 2013

Hierarchical Inheritance – C++.



Hierarchical Inheritance - A base class can have many derived classes.



Example – Hierarchical Inheritance, where Customer class and Vendor class using same database of base class Personal.

#include <iostream.h>

#define MAX 10
  class Personal    //Base Class
      {
          protected:
             int code[MAX];
             char name[MAX][20];
             int amt[MAX];
             int size;
          public:
             Personal(int x)
                 {
                      size=x;
                 }
             void getData();
             void showData();
      };
  void Personal::getData()
      {
          for(int i=0;i<size;i++)
             {
                 cout<<"\n\tCode? ";
                 cin>>code[i];
                 cin.ignore();
                 cout<<"\n\tName? ";
                 cin.get(name[i],20);
                 cout<<"\n\tAmount Due? ";
                 cin>>amt[i];
             }
      }
  void Personal::showData()
      {
          cout<<"\n\t Code\tName\tAmount";
          cout<<"\n\t==========================";
          for(int i=0;i<size;i++)
             {
                 cout<<"\n\t"<<code[i]<<"\t"<<name[i]<<"\t"<<amt[i];
             }
      }
  class Vendor:public Personal   //Derive Class
      {
          private:
             int amtPaid,cd;
          public:
             Vendor(int x):Personal(x){}
             void Payment()
                 {
                      int f=0;
                      cout<<"\n\tEnter Vendor Code : ";
                      cin>>cd;
                      for(int i=0;i<size;i++)
                         {
                              if(cd==code[i])
                                  {
                                      f=1;
                                      break;
                                  }
                         }
                      if(f==0)
                         {
                              cout<<"\n\t\t**No Such Vendor Presents **";
                         }
                      else if(f==1)
                         {
                              if(amt[i]<=0)
                                  {
                                      cout<<"\n\t No due amount for "<<name[i]<<"\n";
                                  }
                              else
                                  {
                                      cout<<"\n\tEnter Amount Paid : ";
                                      cin>>amtPaid;
                                      amt[i]=amt[i]-amtPaid;
                                      cout<<"\n\tRecord Updated ";
                                      showData();
                                  }

                         }
                 }
      };
  class Customer:public Personal   //Derive Class
      {
          private:
             int amtRecvd,cd;
          public:
             Customer(int x):Personal(x){}
             void Received()
                 {
                      int f=0;
                      cout<<"\n\tEnter Customer Code : ";
                      cin>>cd;
                      for(int i=0;i<size;i++)
                         {
                              if(cd==code[i])
                                  {
                                      f=1;
                                      break;
                                  }
                         }
                      if(f==0)
                         {
                              cout<<"\n\t\t**Invalid Customer Code **";
                         }
                      else if(f==1)
                         {
                              if(amt[i]<=0)
                                  {
                                      cout<<"\n\t No due amount for "<<name[i]<<"\n";
                                  }
                              else
                                  {
                                      cout<<"\n\tEnter Amount Received : ";
                                      cin>>amtRecvd;
                                      amt[i]=amt[i]-amtRecvd;
                                      cout<<"\n\tRecord Updated ";
                                      showData();
                                  }

                         }
                 }
      };

  int main()
      {
          int n;
          cout<<"\n\tEnter Nos of Records : ";
          cin>>n;
          Vendor V(n);
          V.getData();
          V.showData();
          V.Payment();
          Customer C(n);
          C.getData();
          C.showData();
          C.Received();
          return 0;
      }

Thursday, February 21, 2013

Multi-Level inheritance – C++



Mechanism, where derived classes derived from other derived classes is known as  Multi-Level inheritance.


 Example : Multi-Level Inheritance using Parameterize constructor

#include <iostream.h>

  class Base
      {
           protected:
              int a;
           public:
              Base()
                   {
                        a=0;
                   }
              Base(int x)
                   {
                        a=x;
                   }
              void Disp()
                   {
                        cout<<"\n\tFirst Number : "<<a;
                   }
      };
  class Derived_1:public Base
      {
           protected:
              int b;
           public:
              Derived_1(int n,int x):Base(n)
                   {
                        b=x;
                   }
              void Print()
                   {
                        cout<<"\n\tSecond Number : "<<b;
                   }

      };
  class Derived_2:public Derived_1
      {
           protected:
              int c;
           public:
              Derived_2(int n,int x,int n1):Derived_1(n,x)
                   {
                        c=n1;
                   }
              void Show()
                   {
                        cout<<"\n\tThird Number : "<<c;
                        cout<<"\n\n\t\tSum = "<<a+b+c;
                   }

      };

  int main()
      {
           Derived_2 Der(50,45,35);
           Der.Disp();
           Der.Print();
           Der.Show();
           return 0;
      }   


 Example : Deposit class derived from Bank class and where Withdra class derived from Deposit.

#include <iostream.h>

  class Bank
      {
           protected:
              char name[20][20];
              int ac_no[20];
              float balance[20];
              int N;
           public:
              Bank(){}
              void GetData();
              void DispData();
      };
  void Bank::GetData()
      {
           cout<<"\n\tEnter Size? [Below 20] ";
           cin>>N;
           for(int i=0;i<N;i++)
              {
                   cout<<"\n\tA/c No: ";
                   cin>>ac_no[i];
                   cin.ignore();
                   cout<<"\n\tAccount Holder Name : ";
                   cin.getline(name[i],20);
                   cout<<"\n\tCurrent Balance : ";
                   cin>>balance[i];
              }
      }
  void Bank::DispData()
      {
           cout<<"\n\tA/C No\tName\t\tBalance";
           cout<<"\n\t==============================";
           for(int i=0;i<N;i++)
              {
                   cout<<"\n\t"<<ac_no[i]<<"\t"<<name[i]<<"\t\t"<<balance[i];
              }
           cout<<"\n\t==============================";
      }
  class Deposit:public Bank
      {
           protected:
              float damt;
           public:
              Deposit()
                   {
                        damt=0;
                   }
              void Debit(int,float);
      };
  void Deposit::Debit(int ac,float dm)
      {
           damt=dm;
           int i,flag=0;
           for(i=0;i<N;i++)
              {
                   if(ac_no[i]==ac)
                        {
                            flag=1;
                            break;
                        }
              }
           if(flag==1)
              {
                   balance[i]=balance[i]+damt;
                   cout<<"\n\tDeposited, Current Balance "<<balance[i];
              }
           else
              {
                   cout<<"\n\tInvalid Account No. ";
              }
      }
  class Withdraw:public Deposit
      {
           protected:
              float wamt;
           public:
              Withdraw()
                   {
                        wamt=0;
                   }
              void Credit(int,float);
      };
  void Withdraw::Credit(int ac,float wm)
      {
           wamt=wm;
           int i,flag=0;
           for(i=0;i<N;i++)
              {
                   if(ac_no[i]==ac)
                        {
                            flag=1;
                            break;
                        }
              }
           if(flag==1)
              {
                   if(balance[i]<wamt)
                        {
                            cout<<"\n\tNot Enough Balance";
                        }
                   else
                        {
                            balance[i]=balance[i]-wamt;
                            cout<<"\n\tCurrent Balance "<<balance[i];
                        }
              }
           else
              {
                   cout<<"\n\tInvalid Account No. ";
              }
      }

  int  main()
      {
           float amt;
           Withdraw W;
           W.GetData();
           int c=0,ac;
           while(c!=4)
              {
                   cout<<"\n\n\t1. Deposit";
                   cout<<"\n\t2. Withdraw";
                   cout<<"\n\t3. Display";
                   cout<<"\n\t4. Exit";
                   cout<<"\n\tChoice? ";
                   cin>>c;
                   switch(c)
                        {
                            case 1:
                                cout<<"\n\tAcoount No? ";
                                cin>>ac;
                                cout<<"\n\tAmount? ";
                                cin>>amt;
                                W.Debit(ac,amt);
                                break;
                            case 2:
                                cout<<"\n\tAcoount No? ";
                                cin>>ac;
                                cout<<"\n\tAmount? ";
                                cin>>amt;
                                W.Credit(ac,amt);
                                break;
                            case 3:
                                cout<<"\n\tCurrent Statement : ";
                                W.DispData();
                                break;
                            case 4:
                                break;
                            default:
                                cout<<"\n\tInvalid Option ";
                        }
              }
           return 0;

      }

 Example :  SoftDrink class Derived from Sold and Sold class derived from SoftName class.

#include <iostream.h>

  class SoftName
      {
           protected:
              char name[20][20];
              int size;
           public:
              void GetName();
      };
  void SoftName::GetName()
      {
           cout<<"\n\tNumber of Products : ";
           cin>>size;
           cout<<"\n\tName of the Softdrink:";
           for(int i=0;i<size;i++)
              {
                   cout<<"\n\t";
                   cin>>name[i];
              }
      }
  class Sold:public SoftName
      {
           protected:
              int bot[20][20],Syear,Nyear;
              public:
                   void GetBottle();
      };
  void Sold::GetBottle()
      {
           int z;
           cout<<"\n\tStarting Year : ";
           cin>>Syear;
           cout<<"\n\tNumbers of Year:";
           cin>>Nyear;
           for(int j=0;j<Nyear;j++)
              {
                   cout<<"\n\tYear= "<<Syear+j;
                   for(int k=0;k<size;k++)
                        {
                            cout<<"\n\tBottles for Product= "<<name[k]<<"  ";
                            cin>>bot[j][k];
                        }
              }
      }
  class SoftDrink:public Sold
      {
           public:
           void display();
      };
  void SoftDrink::display()
      {
           for(int j=0;j<Nyear;j++)
              {
                   cout<<"\n\t\t\tYear= "<<Syear+j;
                   for(int k=0;k<size;k++)
                        {
                            cout<<"\n\tProduct= "<<name[k]<<"  "<<bot[j][k];
                        }
              }
      }
  int main()
      {
           SoftDrink S;
           S.GetName();
           S.GetBottle();
           S.display();
           return 0;
      }