如何创建派生指针类变量?

问题描述 投票:0回答:1

目前正在做作业,我应该创建一个包含不同类型卡片的向量。所以我创建了一个卡类和2个派生类(身份证、银行卡)。每个班级都有其独特的信息(名称等)。我不知道如何在向量中创建身份证和银行卡。另外,有人可以解释多态性以及它在这段代码中是如何使用的吗?我尝试使用 & 但我不确定该符号的确切用途是什么。

std::cout << "Card Type: " ;
std::cin >> card_type;

while (card_type)
{
    if (card_type == 1)
    {
        std::cout << "Institution name: ";
        getline (std::cin, institute_name);
        std::cin.ignore();
        std::cout << "Cardholder name: ";
        getline (std::cin, card_name);
        std::cin.ignore();
        std::cout << "Expiration date mmddyyyy (0 if none): ";
        std::cin >> expire_date;
        std::cout << std::endl <<std::endl;
        Card* regular = new Card(institute_name, card_name, expire_date);
        cardbook.push_back (regular);
    }
    else if (card_type == 2)
    {
        std::cout << "Institution name: ";
        getline (std::cin, institute_name);
        std::cin.ignore();
        std::cout << "Cardholder name: ";
        getline (std::cin, card_name);
        std::cin.ignore();
        std::cout << "Expiration date mmddyyyy (0 if none): ";
        std::cin >> expire_date;
        std::cout << "ID number: ";
        std::cin >> identify_num;
        std::cout << "DOB mmddyyyy (0 if not listed)";
        std::cin >> birthdate;
        std::cout << std::endl << std::endl;
        IDCard* identification = new IDCard(institute_name, card_name, expire_date, identify_num, birthdate);
        cardbook.push_back (identification);
    }
    else if (card_type == 3)
    {
        std::cout << "Institution name: ";
        getline (std::cin, institute_name);
        std::cin.ignore();
        std::cout << "Cardholder name: ";
        getline (std::cin, card_name);
        std::cin.ignore();
        std::cout << "Expiration date mmddyyyy (0 if none): ";
        std::cin >> expire_date;
        std::cout << "Account number: ";
        std::cin >> account_num;
        std::cout << "Card Security Code: ";
        std::cin >> secure_code;
        std::cout << std::endl << std::endl;
        BankCard* bank = new BankCard (institute_name, card_name, expire_date, account_num, secure_code);
        cardbook.push_back (bank);
    }
c++ class pointers vector polymorphism
1个回答
0
投票

创建一个包含不同类型的向量

您可以通过创建类层次结构并在

vector
中存储指向基类型的指针来实现此目的。听起来您已经创建了层次结构,但尚未显示您的代码,我无法对您的具体问题进一步发表评论。

示例

// This example creates a base type with 2 derived types and stores the
// derived types in a `vector` using a base type pointer.
//
// The polymorphism is observed when `Base::action` is called but
// `action` from the "real" type `Foo` and `Bar` is invoked.

#include <iostream>
#include <memory>
#include <vector>
 
class Base
{
public:
    virtual ~Base() {}
    virtual void action() const = 0;
};
 
class Foo : public Base
{
public:
    void action() const override { std::cout << "Foo::action\n"; }
};
 
class Bar : public Base
{
public:
    void action() const override { std::cout << "Bar::action\n"; }
};
 
int main()
{
    // A `vector` of base type pointers
    std::vector<std::unique_ptr<Base>> values;

    // Add a `Foo` type to the `vector`
    values.emplace_back(new Foo());

    // Add a `Bar` type to the `vector`
    values.emplace_back(new Bar());
 
    // For each `v` (which is a `Base` pointer) in `values`
    for(auto& v : values)
    {
        // Calling `action` through the `Base` pointer
        v->action();
    }
 
    return 0;
}

输出

Foo::action
Bar::action
© www.soinside.com 2019 - 2024. All rights reserved.