类型兼容性规则是指在需要积累对象的任何地方,都可以使用共有的派生类的对象来替代。
兼容性规则:
* 子类对象可以当作父类对象使用
* 子类对象可以直接赋值给基类对象
* 子类对象可以直接初始化父类对象
* 父类指针可以直接指向子类对象
* 父类引用可以直接指向子类对象
在替代之后,派生类就对象就可以作为基类的对象使用但只能从基类继承成员。
验证:父类指针可以直接指向子类对象
#include <iostream>
using namespace std;
class parent{
public:
void SetVar(int a, int b, int d)
{
this->a = a;
this->b = b;
this->d = d;
}
void printP(void)
{
cout << "基类" << endl;
}
public:
int a;
private:
int b;
protected:
int d;
};
class child3 : public parent
{
public:
int c;
void printC(void)
{
cout << "派生类" << endl;
}
public:
private:
protected:
};
int main()
{
parent* pt=NULL;
child3 oop;
pt = &oop;
oop.SetVar(1, 2, 3);
pt->printP();
/*pt->printC(); 不合法的访问*/
system("pause");
return 0;
}
pt->printC()注意这里的访问不合法;
验证:父类引用可以直接指向子类对象
#include <iostream>
using namespace std;
class parent{
public:
void SetVar(int a, int b, int d)
{
this->a = a;
this->b = b;
this->d = d;
}
void printP(void)
{
cout << "基类" << endl;
}
public:
int a;
private:
int b;
protected:
int d;
};
class child3 : public parent
{
public:
int c;
void printC(void)
{
cout << "派生类" << endl;
}
public:
private:
protected:
};
int main()
{
child3 oop;
oop.SetVar(1, 2, 3);
parent &oop1 = oop;
oop1.printP();
/*oop1.printC(); 不合法的访问*/
system("pause");
return 0;
}
当用基类指针或者引用指向派生类以后就可以使用基类想派生类使用基类一样方便;