C++实验七继承和派生.pdf
实验七继承和派生
实验目的
学习声明和使用类的继承关系,声明派生类。
熟悉不同继承方式下对基类成员的访问控制。
学习利用虚基类解决二义性问题。
理解继承中构造函数和析构函数的调用规则。
实验内容:
一、程序分析题
1阅读下面的程序,写出运行结果。
#includeiostream
usingnamespacestd;
classA
{
public:
调用A的默认构造函数的默认构造函数
调用A的带参数构造函数的带参数构造函数
调用A的默认析构函数的默认析构函数
intGeta(){returna;}
private:
inta;
};
classB:publicA
{
public:
调用B的默认构造函数的默认构造函数
B(inti,intj,intk);
调用B的默认析构函数的默认析构函数
voidPrint();
private:
intb;
Aaa;
};
B::B(inti,intj,intk):A(i),aa(j)
{b=k;{b=k;
调用B的构造函数的构造函数
};
voidB::Print()
{A::Print();{A::Print();
}
intmain()
{
Bbb(1,2,5);
bb.Print();
return0;
}
2阅读下面程序,写出运行结果。
#includeiostream
usingnamespacestd;
classa
{
protected:
intx;
public:
voidshow(){coutxendl;}
};
classb
{protected:
intx;
public:
voidshow(){coutxendl;}
};
classc:publica,publicb
{public:
voidset(inti,intj){a::x=i;b::x=j;}voidset(inti,intj){a::x=i;b::x=j;}
};
intmain()
{cobjc;
objc.set(2,3);
objc.a::show();
objc.b::show();
objc.show();
return0;
}
3阅读下面程序,写出运行结果。
#includeiostream
usingnamespacestd;
classbase
{
intn;
public:
base(inta)
{
n=a;
}
};
classsubs:publicbase
{
basebobj;
intm;
public:
subs(inta,intb,intc):base(a),bobj(c)
{
m=b;
}
};
intmain()
{
subss(1,2,3);
return0;
}
4阅读下面程序,写出运行结果。
#includeiostream
usingnamespacestd;
classA
{
inta;
public:
voidprint(){coutaendl;}
};
classB1:publicA
{
intbl;
public:
B1(inti,intj):A(i)
{
}
voidprint()
{
A::print();
coutblendl;
}
};
classB2:publicA
{
intb2;
public:
B2(inti,intj):A(i)
{
}
voidprint()
{
A::print();
coutb2endl;
}
};
classC:public