1.可以直接将派生对象 赋值给 基类变量
2.可以 将派生对象的指针 直接 给到 基类指针变量
3.可以直接将派生对象直接给到 基类的 引用
#include<iostream>
#include<string>
using namespace std;
class Base
{
protected:
int x;
public:
Base(int x_ = 0) :x(x_) {
cout << "调用基类1个参数的构造函数" << endl;
};
//getX
int getX()
{
return x;
}
};
//派生类
class Derived:public Base
{
private:
int y;
public:
using Base::x; //修改x的访问权限为public
Derived(int y_ = 0,int x_=999) :y(y_) {
this->x = x_;
cout << "调用派生类1个参数的构造函数" << endl;
};
};
int main()
{
//测试:
Base test_base;
Derived test_derived;
//(1)通过 将派生对象 赋值给 基类对象 实现向上类型转换的值传递
cout << "原来 test_base中的x的值: " << test_base.getX() << endl;
test_base = test_derived;
cout << "后来test_base中的x的值: " << test_base.getX() << endl;
//成功赋值
//(2)将派生类对象的地址给到基类指针
Base* base_p = new Base(555);
cout << "原来 test_p中的x的值: " << base_p->getX() << endl;
base_p = &test_derived;
cout << "后来 test_p中的x的值: " << base_p->getX() << endl;
//成功赋值
//(3)将派生对象 赋值给 基类的引用类型变量
Base & base_r = test_derived;
cout << "原来 base_r中的x的值: " << base_r.getX() << endl;
//赋值成功
//(4)将开辟的derived类型的指针直接传递给 base指针
base_p = new Derived(520); //这个值给到了y...
cout << "最后 test_p中的x的值: " << base_p->getX() << endl;
return 0;
}