为什么不增加? (构造函数)

时间:2018-10-16 15:30:47

标签: c++ visual-studio constructor increment destructor

创建了一个名为“ Fahrzeug”的类,其中包含成员变量 p_iID p_iMaxID 。现在,主要在我中创建一些类型为“ Fahrzeug”的对象。目标是每个创建的对象都有其唯一的ID,我试图通过递增来实现 构造函数中的 p_iMaxID 。问题,它没有增加。打开任何帮助:)

代码:

Fahrzeug.h:

#pragma once
#include <iostream>
#include <string>
class Fahrzeug
{
public:
    Fahrzeug();
    Fahrzeug(std::string);
    ~Fahrzeug();

private:
    std::string p_sName;
    int p_iID;
    int p_iMaxID = 0;
    //Hochzählende Fahrzeugnummer
};

Fahrzeug.cpp:

#include "Fahrzeug.h"
using namespace std;

Fahrzeug::Fahrzeug()
{
    p_sName = " ";
    p_iID = p_iMaxID + 1;
    cout << "ID des erzeugten Objects: " << p_iID << ", Name des erzeugten Objects: (NIX)" << p_sName << endl;
}

Fahrzeug::Fahrzeug(std::string autoName)
{
    p_iID = p_iMaxID + 1;
    p_sName = autoName;
    cout << "ID des erzeugten Objects: " << p_iID << ", Name des erzeugten Objects: " << p_sName << endl;
}

Fahrzeug::~Fahrzeug()
{
    cout << "ID des gelöschten Objects: " << p_iID << ", Name des gelöschten Objects: " << p_sName << endl;
}

main.cpp:

#include "Fahrzeug.h"
using namespace std;

void vAufgabe_1()
{
    Fahrzeug auto1("Auto1");
    Fahrzeug auto2("Auto2");
    string sNameInput1, sNameInput2;
    cout << "Name fuer Auto3: " << endl;
    cin >> sNameInput1;
    Fahrzeug *auto3 = new Fahrzeug(sNameInput1);
    cout << "Name fuer auto4: " << endl;
    cin >> sNameInput2;
    Fahrzeug *auto4 = new Fahrzeug(sNameInput2);

    delete auto3;
    delete auto4;
}

int main()
{
    vAufgabe_1();
    return 0;
}

2 个答案:

答案 0 :(得分:3)

您需要将变量设为静态:

static int p_iMaxID = 0;

,以便您的所有对象共享p_iMaxID。您还需要在某处增加它

p_iMaxID++;

答案 1 :(得分:2)

有2个不起作用的原因

  • 您实际上并没有增加p_iMaxID
  • 您的“ Fahrzeuge”没有共享相同的p_iMaxID,因为它不是静态的