目前,我正在研究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;
}
答案 0 :(得分:2)
您的函数void printer(Parent p);
将使用编译器自动为您创建的复制构造函数创建类型为Parent
的新对象。您需要将其更改为引用:
void printer(Parent& p);
这将确保p
实际上是对child
的引用,而不是使用复制构造函数从Parent
创建的新child
。
此处发生的事情也称为object slicing,因为副本是父类型,它没有在子类中定义的任何成员。