Как переопределить функцию в C ++ - PullRequest
0 голосов
/ 20 мая 2018

В настоящее время я работаю над проектом c ++. Я хочу знать, как я могу отправить экземпляр дочернего класса в функцию, используя parent в качестве параметра и выполнить функцию в потомке. Вот пример: я хочу, чтобы функция печати Childназываться

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;
}

1 Ответ

0 голосов
/ 20 мая 2018

Ваша функция void printer(Parent p); создаст новый объект типа Parent, используя конструктор копирования, автоматически созданный вашим компилятором.Вам нужно изменить его так, чтобы вместо него использовалась ссылка :

void printer(Parent& p);

Это будет гарантировать, что p на самом деле является ссылкой на child, а не новым созданным Parentиз child с использованием конструктора копирования.

То, что здесь происходит, также называется срезы объектов , поскольку копия является родительским типом, для которого не определены какие-либо члены, определенные в дочернем элементе.класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...