Skip to main content

Object Slicing in C++


What is object slicing in c++ ?

When a Derived Class object is assigned to Base class, the 
base class' contents in the derived object are copied to 
the base class leaving behind the derived class specific 
contents. This is referred as Object Slicing.

Class Base
{
public:
  int i;
};

class Derived : public Base

{
public:
  int j;
};

int main()
{
  Base Bobj;
  Derived Dobj;
  Bobj = Dobj;  //Here Dobj contains both i and j. 
                //But only i is copied to Bobj.
}

  • Object slicing is a concept where additional attributes of a derived class object is sliced to form a base class object.
  • Object slicing doesn't occur when pointers or references to objects are passed as function arguments since both the pointers are of the same size.
  • Object slicing will be noticed when pass by value is done for a derived class object for a function accepting base class object.
  • Object slicing could be prevented by making the base class function pure virtual there by disallowing object creation.
#include<iostream>
using namespace std;

class Base {
        int data1;
        int data2;
    public:
        Base(int a, int b) {
            data1 = a;
            data2 = b;
        }

        virtual void display() {
            cout << "I am Base class" << endl;
        }
};

class Derived : public Base {
        int data3;
    public:
        Derived(int a, int b, int c) : Base(a, b) {
            data3 = c;
        }

        void display() {
            cout << "I am Derived class" << endl;
        }
};

void somefunc ( Base obj )
{
    obj.display();
}

int main()
{
    Base b(10, 20);
    Derived d(100, 200, 300);

    somefunc(b);
    somefunc(d);
}

OUTPUT:
I am Base class
I am Base class

Comments

Popular posts from this blog

Add JS to the bottom of the page in Drupal 7

How to add JS at bottom of a particular page in Drupal 7 Step 1: Get the page id. In case of front page "is_front"  Step 2: In template.php file of your theme add the below code : function illume_preprocess_page(&$variables) { if ($variables['is_front']) { drupal_add_js(path_to_theme().'/js/util.js', array('type' => 'file', 'scope' => 'footer')); drupal_add_js(path_to_theme().'/js/main.js', array('type' => 'file', 'scope' => 'footer')); drupal_add_js(path_to_theme().'/js/slideimage.js', array('type' => 'file', 'scope' => 'footer')); $variables['bottom_scripts'] = drupal_get_js(); } } This way you can add JS file using drupal_add_js() and define scope as footer. Step 3: Now you can use bottom_script variable to the page tpl file where you want to add JS print $bottom_scripts;

Main menu dropdown parent item clickable in Drupal 8 using Bootstrap 4

 Edit menu--main.html.twig template file {# /**  * @file  * Bootstrap Barrio's override to display a menu.  *  * Available variables:  * - menu_name: The machine name of the menu.  * - items: A nested list of menu items. Each menu item contains:  *   - attributes: HTML attributes for the menu item.  *   - below: The menu item child items.  *   - title: The menu link title.  *   - url: The menu link url, instance of \Drupal\Core\Url  *   - localized_options: Menu link localized options.  *   - is_expanded: TRUE if the link has visible children within the current  *     menu tree.  *   - is_collapsed: TRUE if the link has children within the current menu tree  *     that are not currently visible.  *   - in_active_trail: TRUE if the link is in the active trail.  */ #} {% import _self as menus...

Use Case Diagram for Online Book Store