gpt4 book ai didi

c++ - 如何覆盖 C++ 中的函数

转载 作者:行者123 更新时间:2023-11-30 03:23:19 25 4
gpt4 key购买 nike

目前,我正在研究 C++ 项目 我想知道如何发送一个子类的实例来使用父类作为参数并在子类中执行一个函数,这里是一个例子:我想要子类打印函数来被称为

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

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

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

最佳答案

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

void printer(Parent& p);

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

这里发生的事情也被称为object slicing ,因为拷贝是父类型,它没有在子类中定义的任何成员。

关于c++ - 如何覆盖 C++ 中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50430098/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com