Static members belong to the class itself instead of one object.

static member A static member is shared by every object of the class.

Static Members

ticketCount
static_members.cpp
Replay: real traced execution (multi-file project)
#include <iostream>

class Ticket {
private:
    static int nextId;
    int id;

public:
    Ticket() {
        id = nextId;
        nextId++;
    }

    int number() {
        return id;
    }

    static int nextNumber() {
        return nextId;
    }
};

int Ticket::nextId = 100;

int main() {
    int ticketCount = 3;
    int lastNumber = 0;

    for (int i = 0; i < ticketCount; i++) {
        Ticket ticket;
        lastNumber = ticket.number();
    }

    std::cout << "ticketCount=" << ticketCount << std::endl;
    std::cout << "lastNumber=" << lastNumber << std::endl;
    std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;
    return 0;
}
#include <iostream>

class Ticket {
private:
    static int nextId;
    int id;

public:
    Ticket() {
        id = nextId;
        nextId++;
    }

    int number() {
        return id;
    }

    static int nextNumber() {
        return nextId;
    }
};

int Ticket::nextId = 100;

int main() {
    int ticketCount = 1;
    int lastNumber = 0;

    for (int i = 0; i < ticketCount; i++) {
        Ticket ticket;
        lastNumber = ticket.number();
    }

    std::cout << "ticketCount=" << ticketCount << std::endl;
    std::cout << "lastNumber=" << lastNumber << std::endl;
    std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;
    return 0;
}
#include <iostream>

class Ticket {
private:
    static int nextId;
    int id;

public:
    Ticket() {
        id = nextId;
        nextId++;
    }

    int number() {
        return id;
    }

    static int nextNumber() {
        return nextId;
    }
};

int Ticket::nextId = 100;

int main() {
    int ticketCount = 4;
    int lastNumber = 0;

    for (int i = 0; i < ticketCount; i++) {
        Ticket ticket;
        lastNumber = ticket.number();
    }

    std::cout << "ticketCount=" << ticketCount << std::endl;
    std::cout << "lastNumber=" << lastNumber << std::endl;
    std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;
    return 0;
}
  1. ticketCount ← 3, lastNumber ← 0

    25int main() {26    int ticketCount→ 3 = 3; //@ticketCount=1, 427    int lastNumber→ 0 = 0;
  2. for (int i = 0; i < ticketCount; i++)

    pass 1 of 3
    29for (int i0 = 0; i < ticketCount3; i++) {30    Ticket ticket;31    lastNumber = ticket.number();
    All 3 passes — pass 1 is the card above
    passi
    10
    21
    32
  3. id ← 100, nextId ← 101

    pass 1 of 3
    8public:9    Ticket() {10        id→ 100 = nextId100;11        nextId→ 101++;12    }
    All 3 passes — pass 1 is the card above
    passidnextId
    1163840 100100 101
    2100 101101 102
    3101 102102 103
  4. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber0 = ticket(empty).number();32}
  5. int number()

    pass 1 of 3
    14int number() {15    return id100;16}
    All 3 passes — pass 1 is the card above
    passid
    1100
    2101
    3102
  6. lastNumber ← 100

    30    Ticket ticket;31    lastNumber→ 100 = ticket(empty).number();32}
  7. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber100 = ticket(empty).number();32}
  8. lastNumber ← 101

    30    Ticket ticket;31    lastNumber→ 101 = ticket(empty).number();32}
  9. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber101 = ticket(empty).number();32}
  10. lastNumber ← 102

    30    Ticket ticket;31    lastNumber→ 102 = ticket(empty).number();32}
  11. std::cout << "ticketCount=" << ticketCount << std::endl;

    34std::cout << "ticketCount=" << ticketCount3 << std::endl;35std::cout << "lastNumber=" << lastNumber102 << std::endl;36std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;37return 0;
    outputticketCount=3
    lastNumber=102
  12. static int nextNumber()

    18static int nextNumber() {19    return nextId103;20}
  13. std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;

    35    std::cout << "lastNumber=" << lastNumber << std::endl;36    std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;37    return 0;38}
    outputnextNumber=103
  1. ticketCount ← 1, lastNumber ← 0

    25int main() {26    int ticketCount→ 1 = 1;27    int lastNumber→ 0 = 0;
  2. for (int i = 0; i < ticketCount; i++)

    29for (int i0 = 0; i < ticketCount1; i++) {30    Ticket ticket;31    lastNumber = ticket.number();
  3. id ← 100, nextId ← 101

    8public:9    Ticket() {10        id→ 100 = nextId100;11        nextId→ 101++;12    }
  4. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber0 = ticket(empty).number();32}
  5. int number()

    14int number() {15    return id100;16}
  6. lastNumber ← 100

    30    Ticket ticket;31    lastNumber→ 100 = ticket(empty).number();32}
  7. std::cout << "ticketCount=" << ticketCount << std::endl;

    34std::cout << "ticketCount=" << ticketCount1 << std::endl;35std::cout << "lastNumber=" << lastNumber100 << std::endl;36std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;37return 0;
    outputticketCount=1
    lastNumber=100
  8. static int nextNumber()

    18static int nextNumber() {19    return nextId101;20}
  9. std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;

    35    std::cout << "lastNumber=" << lastNumber << std::endl;36    std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;37    return 0;38}
    outputnextNumber=101
  1. ticketCount ← 4, lastNumber ← 0

    25int main() {26    int ticketCount→ 4 = 4;27    int lastNumber→ 0 = 0;
  2. for (int i = 0; i < ticketCount; i++)

    pass 1 of 4
    29for (int i0 = 0; i < ticketCount4; i++) {30    Ticket ticket;31    lastNumber = ticket.number();
    All 4 passes — pass 1 is the card above
    passi
    10
    21
    32
    43
  3. id ← 100, nextId ← 101

    pass 1 of 4
    8public:9    Ticket() {10        id→ 100 = nextId100;11        nextId→ 101++;12    }
    All 4 passes — pass 1 is the card above
    passidnextId
    1163840 100100 101
    2100 101101 102
    3101 102102 103
    4102 103103 104
  4. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber0 = ticket(empty).number();32}
  5. int number()

    pass 1 of 4
    14int number() {15    return id100;16}
    All 4 passes — pass 1 is the card above
    passid
    1100
    2101
    3102
    4103
  6. lastNumber ← 100

    30    Ticket ticket;31    lastNumber→ 100 = ticket(empty).number();32}
  7. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber100 = ticket(empty).number();32}
  8. lastNumber ← 101

    30    Ticket ticket;31    lastNumber→ 101 = ticket(empty).number();32}
  9. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber101 = ticket(empty).number();32}
  10. lastNumber ← 102

    30    Ticket ticket;31    lastNumber→ 102 = ticket(empty).number();32}
  11. ticket ← (empty)

    29for (int i = 0; i < ticketCount; i++) {30    Ticket ticket→ (empty);31    lastNumber102 = ticket(empty).number();32}
  12. lastNumber ← 103

    30    Ticket ticket;31    lastNumber→ 103 = ticket(empty).number();32}
  13. std::cout << "ticketCount=" << ticketCount << std::endl;

    34std::cout << "ticketCount=" << ticketCount4 << std::endl;35std::cout << "lastNumber=" << lastNumber103 << std::endl;36std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;37return 0;
    outputticketCount=4
    lastNumber=103
  14. static int nextNumber()

    18static int nextNumber() {19    return nextId104;20}
  15. std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;

    35    std::cout << "lastNumber=" << lastNumber << std::endl;36    std::cout << "nextNumber=" << Ticket::nextNumber() << std::endl;37    return 0;38}
    outputnextNumber=104