1、
《面向对象程序设计》实验三
实验报告
班级 电科2班 学号 Xb11640218 姓名 张俊为
1 实验目的
(1) 了解面向对象程序设计中继承性、多态性的概念;
(2) 掌握单继承、多重继承中基类成员访问属性的变化规律及访问方法;
(3) 掌握类族中构造函数和析构函数的定义方法及调用顺序;
(4) 掌握虚函数的定义和使用方法;
2 实验任务及结果分析(代码和分析结果)
任务一:分别采用公有继承、私有继承、保护继承完成类的设计。
#include "iostream"
#include 2、ing>
using namespace std;
class student
{public:
void get_value()
{cin>>num>>name>>sex;}
void display()
{cout<<"num: "< 3、tudent
{public:
void get_value_1();
void display_1();
private:
int age;
char addr[30];
};
void student1::get_value_1()
{cin>>age>>addr;}
void student1::display_1()
{cout<<"age:"< 4、ud.get_value();
stud1.get_value_1();
stud.display();
stud1.display_1();
return 0;
}
任务二:对有继承关系的程序结构进行分析。
class A
{public:
void f1( );
int i;
protected:
void f2();
int j;
private:
int k;
};
class B: public A
{public:
void f3( );
protected:
int m;
5、
private:
int n;
};
class C: public B
{public:
void f4();
private:
int p;
};
int main()
{A a1;
B b1;
C c1;
return 0;
}
问题:
(1)在main函数中能否用通过派生类B的对象b1来引用从基类A继承来的成员i,j,k?
答:因为B是A的派生类,i是A的公有成员,j是A的保护成员,k是A的私有成员,所以在类外中,i可以,j,k不可以
(2)派生类B中的成员函数能否调用基类A中的成员函数f1、f2?
6、 答:因为B是A的派生类,f1是A的公有成员函数,f2是A的保护成员函数,所以f1,f2都可以访问
(3)派生类B中的成员函数能否引用基类A中的i,j,k?
答:因为B是A的派生类,i是A的公有成员,j是A的保护成员,k是A的私有成员,所以i,j能,k不能
(4)能否在main函数中通过C类对象c1引用基类A的成员i,j,k类B的成员?
答:因为C是A的派生类,i是A的公有成员,j是A的保护成员,k是A的私有成员, C是B的派生类,m是B的保护成员,n是B的私有成员,
所以在类外,只有i能引用
(5)能否在main函数中用C类对象c1以c1.f1(), 7、c1.f2(),c1.f3(),c1.f4()的形式调用f1(),f2(),f3(),f4()?
答:因为C是A的派生类,f1()是A的公有成员函数,f2()是A的保护成员函数,f3()是B的公有成员函数,f4()是C的公有成员函数,所以在类外,只有f2()无法被调用
(6)派生类C的成员函数f4能否调用基类A的成员函数f1,f2及B类中的f3?
答:因为C是A的派生类,C是B的派生类,f1()是A的公有成员函数,f2()是A的保护成员函数,f3()是B的公有成员函数,所以都可以被调用
任务三:继承关系下,构造函数的调用顺序
#include






