3 votes

Comment puis-je faire passer ma classe dans son propre constructeur ?

J'ai une classe :

class ActivityClass{
public:
    ActivityClass *from; 
    vector<ActivityClass> inside; 
    string name = "default";

    vector<string> tags;

    AcvitityClass(){} // def constructor
    ActivityClass(string aName, ActivityClass aFrom){
        name = aName;
        from = &aFrom;
        aFrom.addInside(this);
    }

    void addInside(ActivityClass toAdd); // stores other activity inside
};

Je veux donc créer un de ces objets, puis en créer un nouveau et le stocker à l'intérieur de l'autre avec le constructeur, et je ne sais pas comment faire.

Il ressemblerait à quelque chose comme ceci :

ActivityClass activity1;
ActivityClass activitiy2("Buenas tardes", activity1);

Ainsi, lorsque je créerai la deuxième activité, elle sera stockée dans la première ou, du moins, elle stockera un pointeur vers la nouvelle classe.

1voto

tadman Points 70178

Il s'agit probablement d'un cas où il faut pointer tous les arguments :

class ActivityClass {
public:
    ActivityClass *from;
    std::vector<ActivityClass*> inside; 
    std::string name = "default";

    std::vector<std::string> tags;

    ActivityClass() : from(nullptr) { }
    ActivityClass(const std::string& aName, ActivityClass* aFrom) : name(aName), from(aFrom) {
        aFrom->addInside(this);
    }

    void addInside(ActivityClass* toAdd) {
        inside.push_back(toAdd);
    }
};

Notez que j'ai ajouté le std:: pour éviter toute ambiguïté. using namespace std est une mauvaise habitude à prendre.

Une bonne habitude à prendre est de passer les choses par référence, const si vous pouvez le faire, en particulier pour les cordes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X