Mohamed Adel
Mohamed Adel

Reputation: 2040

How to override Function in C++

Currently, I am working on c++ project I want to know how I can send an instance of a child class to function use parent as a parameter and execute a function in a child here is an example: I want Child print function to be called

Parent.h

#ifndef UNTITLED_PARENT_H
#define UNTITLED_PARENT_H


class Parent {

public:
    virtual void printData();
};


#endif 

Parent.cpp

#include "Parent.h"
#include <iostream>
using namespace std;

void Parent::printData() {
    cout<<"Parent"<<endl;
}

Child.h

#ifndef UNTITLED_CHILD_H
#define UNTITLED_CHILD_H
#include "Parent.h"

class Child : public Parent{
public:
    void printData();
};

#endif 

Child.cpp

#include "Child.h"
#include <iostream>
using namespace std;

void Child::printData() {
    cout<<"Child"<<endl;
}

ParentUser.h

#ifndef UNTITLED_PARENTUSER_H
#define UNTITLED_PARENTUSER_H
#include "Parent.h"

class ParentUser {

public:
    void printer(Parent p);
};

#endif

ParentUser.cpp

#include "ParentUser.h"

void ParentUser::printer(Parent p) {
    p.printData();
}

main.cpp

#include <iostream>
#include "Parent.h"
#include "Child.h"
#include "ParentUser.h"

int main() {

    Child child;
    ParentUser parentUser;
    parentUser.printer(child);

    return 0;
}

Upvotes: 1

Views: 165

Answers (1)

Max Vollmer
Max Vollmer

Reputation: 8598

Your function void printer(Parent p); will create a new object of type Parent using a copy constructor your compiler automagically creates for you. You need to change it to take a reference instead:

void printer(Parent& p);

This will make sure that p is actually a reference to child, not a new Parent created from child using a copy constructor.

What's happening here is also called object slicing, as the copy is a parent type, which does not have any of the members defined in the child class.

Upvotes: 2

Related Questions