add some classes experiment
This commit is contained in:
parent
0b0c4cfdcb
commit
d45fdd153d
3 changed files with 43 additions and 0 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -14,3 +14,4 @@ accumulate
|
||||||
object-lifetime
|
object-lifetime
|
||||||
shared_ptr
|
shared_ptr
|
||||||
casts
|
casts
|
||||||
|
classes
|
||||||
|
|
|
@ -14,3 +14,4 @@ add_executable(accumulate accumulate.cpp)
|
||||||
add_executable(object-lifetime object-lifetime.cpp)
|
add_executable(object-lifetime object-lifetime.cpp)
|
||||||
add_executable(shared_ptr shared_ptr.cpp)
|
add_executable(shared_ptr shared_ptr.cpp)
|
||||||
add_executable(casts casts.cpp)
|
add_executable(casts casts.cpp)
|
||||||
|
add_executable(classes classes.cpp)
|
||||||
|
|
41
classes.cpp
Normal file
41
classes.cpp
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#include <iostream>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
class Animal {
|
||||||
|
public:
|
||||||
|
// Note: using *virtual* does the difference here!
|
||||||
|
virtual void makeSound() {
|
||||||
|
std::cout << "<generic animal sound>" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Cow : public Animal {
|
||||||
|
public:
|
||||||
|
void makeSound() {
|
||||||
|
std::cout << "Mooh." << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
class Cat : public Animal {
|
||||||
|
public:
|
||||||
|
void makeSound() {
|
||||||
|
std::cout << "Meow?" << std::endl;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
Cat cat;
|
||||||
|
Cow cow;
|
||||||
|
|
||||||
|
// Does nothing:
|
||||||
|
std::vector<Animal> animals = { cat, cow };
|
||||||
|
for (auto &a: animals) {
|
||||||
|
a.makeSound();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Meow? Mooh.
|
||||||
|
std::vector<Animal*> animalptrs = { &cat, &cow };
|
||||||
|
for (auto &a: animalptrs) {
|
||||||
|
a->makeSound();
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Add a link
Reference in a new issue