Classes
Static Members
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
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;
}
ticketCount ← 3, lastNumber ← 0
25int main() {26 int ticketCount→ 3 = 3; //@ticketCount=1, 427 int lastNumber→ 0 = 0;for (int i = 0; i < ticketCount; i++)
pass 1 of 329for (int i0 = 0; i < ticketCount3; i++) {30 Ticket ticket;31 lastNumber = ticket.number();All 3 passes — pass 1 is the card above pass i1 0 2 1 3 2 id ← 100, nextId ← 101
pass 1 of 38public:9 Ticket() {10 id→ 100 = nextId100;11 nextId→ 101++;12 }All 3 passes — pass 1 is the card above pass idnextId1 163840 → 100 100 → 101 2 100 → 101 101 → 102 3 101 → 102 102 → 103 ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber0 = ticket(empty).number();32}int number()
pass 1 of 314int number() {15 return id100;16}All 3 passes — pass 1 is the card above pass id1 100 2 101 3 102 lastNumber ← 100
30 Ticket ticket;31 lastNumber→ 100 = ticket(empty).number();32}ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber100 = ticket(empty).number();32}lastNumber ← 101
30 Ticket ticket;31 lastNumber→ 101 = ticket(empty).number();32}ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber101 = ticket(empty).number();32}lastNumber ← 102
30 Ticket ticket;31 lastNumber→ 102 = ticket(empty).number();32}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=102static int nextNumber()
18static int nextNumber() {19 return nextId103;20}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
ticketCount ← 1, lastNumber ← 0
25int main() {26 int ticketCount→ 1 = 1;27 int lastNumber→ 0 = 0;for (int i = 0; i < ticketCount; i++)
29for (int i0 = 0; i < ticketCount1; i++) {30 Ticket ticket;31 lastNumber = ticket.number();id ← 100, nextId ← 101
8public:9 Ticket() {10 id→ 100 = nextId100;11 nextId→ 101++;12 }ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber0 = ticket(empty).number();32}int number()
14int number() {15 return id100;16}lastNumber ← 100
30 Ticket ticket;31 lastNumber→ 100 = ticket(empty).number();32}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=100static int nextNumber()
18static int nextNumber() {19 return nextId101;20}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
ticketCount ← 4, lastNumber ← 0
25int main() {26 int ticketCount→ 4 = 4;27 int lastNumber→ 0 = 0;for (int i = 0; i < ticketCount; i++)
pass 1 of 429for (int i0 = 0; i < ticketCount4; i++) {30 Ticket ticket;31 lastNumber = ticket.number();All 4 passes — pass 1 is the card above pass i1 0 2 1 3 2 4 3 id ← 100, nextId ← 101
pass 1 of 48public:9 Ticket() {10 id→ 100 = nextId100;11 nextId→ 101++;12 }All 4 passes — pass 1 is the card above pass idnextId1 163840 → 100 100 → 101 2 100 → 101 101 → 102 3 101 → 102 102 → 103 4 102 → 103 103 → 104 ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber0 = ticket(empty).number();32}int number()
pass 1 of 414int number() {15 return id100;16}All 4 passes — pass 1 is the card above pass id1 100 2 101 3 102 4 103 lastNumber ← 100
30 Ticket ticket;31 lastNumber→ 100 = ticket(empty).number();32}ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber100 = ticket(empty).number();32}lastNumber ← 101
30 Ticket ticket;31 lastNumber→ 101 = ticket(empty).number();32}ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber101 = ticket(empty).number();32}lastNumber ← 102
30 Ticket ticket;31 lastNumber→ 102 = ticket(empty).number();32}ticket ← (empty)
29for (int i = 0; i < ticketCount; i++) {30 Ticket ticket→ (empty);31 lastNumber102 = ticket(empty).number();32}lastNumber ← 103
30 Ticket ticket;31 lastNumber→ 103 = ticket(empty).number();32}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=103static int nextNumber()
18static int nextNumber() {19 return nextId104;20}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