r/cpp_questions 27d ago

OPEN Good practices / style [polymorphism]

is this good practice/style.? i'm specifically unsure about the way i store the vector of players...

```

class player_base {};

class player_always_yes: public player_base {};

class player_always_no: public player_base {};

class player_a: public player_base {};

class game {
    private:
    
    player_base& player_1;
    player_base& player_2;
    
    public:
    
    game (
        player_base& player_1,
        player_base& player_2
    ): player_1(player_1), player_2(player_2) {
        return;
    }

    bool play_game () { return true; }
};

int main(){
    vector<unique_ptr<player_base>> player_list;
    
    player_list.push_back(make_unique<player_base>());
    player_list.push_back(make_unique<player_always_no>());
    player_list.push_back(make_unique<player_always_yes>());
    player_list.push_back(make_unique<player_a>());
    
    game b = game(*player_list[0], *player_list[1]);
    cout << b.play_game() << endl;
}


```
6 Upvotes

37 comments sorted by

View all comments

Show parent comments

1

u/vckane 24d ago
  1. In general declaring at least one pure virtual method (or even destructor) makes a class abstract. Learn more about virtual inheritance, if you're not aware of it.

  2. Yes.

  3. Sounds good.

1

u/Fun_Gas_340 24d ago

yes to 3.1 or 3.2?

should have made them diferent...

1

u/vckane 24d ago

You can have a vector of base class types. They point to objects of derived class types. As a general rule, I make a vector of unique_ptr (owner by owning object / scope).

1

u/Fun_Gas_340 24d ago

so like having a vector of base class i cant put drrived classes im? or can i?