【铺垫】派生类对象可被基类指针所指向,效果与被派生类指针指向等效
·基类/派生类的成员变量由哪个对象初始化的,哪个对象调用该成员变量时就用由它初始化的值 [尤其找准是基类对象or派生类对象的值]
【代码测试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为99
SClass 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;
}