首页 > 解决方案 > 如何在 C++ 中重写函数

问题描述

目前,我正在研究 c++ 项目

父母.h

#ifndef UNTITLED_PARENT_H
#define UNTITLED_PARENT_H


class Parent {

public:
    virtual void printData();
};


#endif 

父级.cpp

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

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

孩子.h

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

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

#endif 

孩子.cpp

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

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

父用户.h

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

class ParentUser {

public:
    void printer(Parent p);
};

#endif

父用户.cpp

#include "ParentUser.h"

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

主文件

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

int main() {

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

    return 0;
}

标签: c++oopinheritance

解决方案


您的函数将使用您的编译器自动为您创建的复制构造函数void printer(Parent p);创建一个新的类型对象。Parent您需要将其更改为参考

void printer(Parent& p);

这将确保它p实际上是对 的引用,而不是使用复制构造函数创建child的新引用。Parentchild

这里发生的事情也称为对象切片,因为副本是父类型,它没有在子类中定义的任何成员。


推荐阅读