// C++
#include <iostream>
using namespace std;
class Animal
{
public:
void eat() const
{
cout << "나는 동물" << endl;
}
};
class Cat : public Animal
{
public:
void eat() const
{
cout << "나는 고양이" << endl;
}
};
class Dog : public Animal
{
public:
void eat() const
{
cout << "나는 강아지" << endl;
}
};
void func(Animal* animal)
{
animal->eat();
}
int main()
{
Animal* a = new Dog();
a->eat();
}
Output:
나는 동물
// C++
#include <iostream>
using namespace std;
class Animal
{
public:
virtual void eat() const
{
cout << "나는 동물" << endl;
}
};
class Cat : public Animal
{
public:
virtual void eat() const override
{
cout << "나는 고양이" << endl;
}
};
class Dog : public Animal
{
public:
virtual void eat() const override
{
cout << "나는 강아지" << endl;
}
};
void func(Animal* animal)
{
animal->eat();
}
int main()
{
Animal* a = new Dog();
func(a);
}
Output:
나는 강아지
// C++
// static binding & dynamic binding
#include <iostream>
using namespace std;
class Animal
{
public:
int* ptr; // 4byte(32bit)
void eat() const
{
cout << "냠" << endl;
}
};
class Cat : public Animal
{
public:
void eat() const
{
cout << "냥" << endl;
}
};
class Dog : public Animal
{
public:
void eat() const
{
cout << "멍" << endl;
}
};
int main()
{
Animal a;
cout << sizeof(Animal) << endl;
cout << &a << endl;
cout << &(a.ptr) << endl;
}
Output:
4
// C++
// static binding & dynamic binding
#include <iostream>
using namespace std;
class Animal
{
public:
int* ptr; // 4byte(32bit)
virtual void eat() const // 4byte(32bit)
{
cout << "냠" << endl;
}
};
class Cat : public Animal
{
public:
virtual void eat() const
{
cout << "냥" << endl;
}
};
class Dog : public Animal
{
public:
virtual void eat() const
{
cout << "멍" << endl;
}
};
int main()
{
Animal a;
cout << sizeof(Animal) << endl;
cout << &a << endl;
cout << &(a.ptr) << endl;
}
Output:
8
00B5F94C
00B5F950