gpt4 book ai didi

c++ - 如何将派生类传递给以基类为参数的函数

转载 作者:行者123 更新时间:2023-12-02 09:49:25 25 4
gpt4 key购买 nike

我仍然是编程的初学者,并且尝试将对象从派生类传递给具有基类的函数。但是,当我打印输出时,它只会打印基类的属性。派生类中的任何礼物都不会出现。如何打印?
给出以下代码:

#include<iostream>
#include<iomanip>
using namespace std;

int count=0;

class Person{
private:
string name;
int age;

public:
Person(string n="NULL", int a=0)
{
name=n;
age=a;
}

void printDetails(){
cout<<endl<<"Name: "<<setw(50)<<name<<"Age: "<<setw(5)<<age;
}

};


class Kid :public Person{
private:
string parentName;
public:
Kid(string n, int a, string pN) : Person(n,a)
{
parentName=pN;
}

void printDetails()
{
printDetails();
cout<<" Parent Name : "<<setw(50)<<parentName;
}
};

class Adult:public Person{
private:
string job;

public:
Adult(string n,int a,string j): Person(n,a)
{
job=j;
}

void printDetails()
{
printDetails();
cout<<" Job Title : "<<setw(50)<<job;
}

};

class Copy{
private:
Person abc[3];
public:
void addPerson(Person a)
{
abc[count]=a;
count++;
}

void print()
{
cout<<left;
for(int i=0;i<3;i++){
abc[i].printDetails();
}
}
};

int main()
{
Copy test1;
Adult p[2]={Adult("Zack",30,"Programmer"),Adult("Zim",26,"Engineer")};
Kid kid("Michael",12,"Amy");

test1.addPerson(p[0]);
test1.addPerson(p[1]);
test1.addPerson(kid);

test1.print();
}

最佳答案

当您将派生对象分配给基类对象时,只有基类的成员才被复制到新对象。如果想到的话,这不可能是其他方式。这称为 slice 。

相反,如果您将指向派生的对象的指针或引用存储在基类类指针中,则它仍指向或引用原始对象(这使用指向对象的指针看起来都相同的事实;所有类型均为hokus- pokus仅在我们和编译器的想象力中)。

为了使派生的版本的成员函数通过基类类指针调用,您必须声明函数virtual。然后,您得到的是一个多态类,它将完全公开您想要在此处看到的行为。

关于c++ - 如何将派生类传递给以基类为参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585749/

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