#include "iostream"
using namespace std;
using namespace std;
//多态成立的三个条件
// 1 要有继承
// 2 虚函数重写
// 3 父类指针指向子类对象
class Parent
{
public:
Parent(int a = 0)
{
this->a = a;
}
virtual void print() //*** 写virtual关键字 C++编译器会特殊处理
{
cout << "我是 嗲" << endl;
}
protected:
private:
int a;
};
class Child :public Parent
// 1 要有继承
// 2 虚函数重写
// 3 父类指针指向子类对象
class Parent
{
public:
Parent(int a = 0)
{
this->a = a;
}
virtual void print() //*** 写virtual关键字 C++编译器会特殊处理
{
cout << "我是 嗲" << endl;
}
protected:
private:
int a;
};
class Child :public Parent
{
public:
Child(int a = 0, int b = 0)
{
this->b = b;
}
virtual void print()//*** 写virtual关键字 C++编译器会特殊处理
{
cout << "我是儿子" << endl;
}
protected:
private:
int b;
};
void playobj(Parent *base)
{
base->print(); //出现多态
//***传来子类对象 执行子类的print函数 传来父类对象 执行父类的print函数
//C++编译器根本不需要区分是子类对象还是父类对象
//父类对象和子类对象分别有vptr指针 -> 虚函数表 -》函数的入口地址
//迟绑定 运行的时候 C++编译器才会去判断
}
void main()
{
Parent p1; //***用类定义对象的时候 C++编译器会在对象中添加一个vptr
Child c1; //vptr指针
playobj(&p1);
playobj(&c1);
public:
Child(int a = 0, int b = 0)
{
this->b = b;
}
virtual void print()//*** 写virtual关键字 C++编译器会特殊处理
{
cout << "我是儿子" << endl;
}
protected:
private:
int b;
};
void playobj(Parent *base)
{
base->print(); //出现多态
//***传来子类对象 执行子类的print函数 传来父类对象 执行父类的print函数
//C++编译器根本不需要区分是子类对象还是父类对象
//父类对象和子类对象分别有vptr指针 -> 虚函数表 -》函数的入口地址
//迟绑定 运行的时候 C++编译器才会去判断
}
void main()
{
Parent p1; //***用类定义对象的时候 C++编译器会在对象中添加一个vptr
Child c1; //vptr指针
playobj(&p1);
playobj(&c1);
system("pause");
return ;
}
return ;
}