【铺垫】派生类对象可被基类指针所指向,效果与被派生类指针指向等效
【代码测试1】15浙工大卷一读程序5题代码改
【代码测试2】C++教辅p206例7.21
【代码1】15浙工大卷一读程序5题代码改
#include "bits/stdc++.h"
#include<iostream>
using namespace std;
class BClass{ //基类 protected:int n;public: BClass(int a){ cout<<"基类构造BClass()"<<endl;n=a;}virtual void Show(){ //show函数的作用就是把变量值展现出来 cout<<"执行基类Show(),基类变量n为"<<n<<endl; }
}; class SClass:public BClass{ //派生类 BClass base; //注意此建了基类对象 int m;public:SClass(int a,int b):BClass(a),base(b){ cout<<"派生构造SClass()"<<endl;n=b;}virtual void Show(){ cout<<"执行派生类Show(),派生类中基类变量n为"<<n<<endl;}
};int main(){ BClass b(99); //创建基类对象.输出基类构造BClass()b.Show(); //输出:执行基类Show(),基类变量n为99SClass s(1,2); //输出2次基类构造BClass()+1次派生构造SClass() BClass *p=&s; //等效于SClass *p=&s.可用基类指针指向派生类对象 p->Show(); //输出:执行派生类Show(),派生类中基类变量n为2 b.Show(); //输出:执行基类Show(),基类变量n为99 return 0;
}
【代码2】C++教辅p206例7.21
#include "bits/stdc++.h"
#include<iostream>
using namespace std;class A{int x;public:A(int i){x=i;}void dispa(){cout<<"A类中的x="<<x<<endl; //A中的x=12 } };class B:public A{int x;public:B(int i):A(i+10){ x=i;}void dispb(){ dispa();cout<<"B类中的x="<<x<<endl; //B类中的x=2 }
};int main(){ B b(2);b.dispb();return 0;
}