在C++编译器内部类可以理解为结构体
子类是由父类成员叠加子类新成员得到的
class Derived : public Demo
{
int mk;
}
#include <iostream>
#include <string>
using namespace std;
class Demo
{
protected:
int mi;
int mj;
public:
virtual void print()
{
cout << "mi = " << mi << ", "
<< "mj = " << mj << endl;
}
};
class Derived : public Demo
{
int mk;
public:
Derived(int i, int j, int k)
{
mi = i;
mj = j;
mk = k;
}
void print()
{
cout << "mi = " << mi << ", "
<< "mj = " << mj << ", "
<< "mk = " << mk << endl;
}
};
struct Test
{
void* p;
int mi;
int mj;
int mk;
};
int main()
{
cout << "sizeof(Demo) = " << sizeof(Demo) << endl;
cout << "sizeof(Derived) = " << sizeof(Derived) << endl;
Derived d(1, 2, 3);
Test* p = reinterpret_cast<Test*>(&d);
cout << "Before changing ..." << endl;
d.print();
p->mi = 10;
p->mj = 20;
p->mk = 30;
cout << "After changing ..." << endl;
d.print();
return 0;
}
C++多态的实现原理
-当类中声明虚函数时,编译器会在类中生成一个虚函数表
-虚函数表是一个存储成员函数地址的数据结构
-虚函数表是由编译器自动生成与维护的
-virtual成员函数会被编译器放入虚函数表中
-存在虚函数时,每个对象中都有一个指向虚函数表的指针
从这个地方可以看出,C++中的多态是通过牺牲效率得到的。因此,在工程开发中,要考虑一个函数需不需要定义成一个虚函数。