教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 文库大全 > 教育文库 >

C++面向对象程序设计实验五 派生与继承

来源:网络收集 时间:2026-07-01
导读: 重庆理工大学C++面向对象程序设计实验 实验五 派生与继承—单重派生 5.1 实验目的 1.理解继承的含义以及声明; 2.理解共有派生、私有派生和保护派生的含义以及使用; 3.理解单派生类中构造函数和析构函数的调用顺序。 5.2 实验内容 5.2.1程序阅读 1.理解

重庆理工大学C++面向对象程序设计实验

实验五 派生与继承—单重派生

5.1 实验目的

1.理解继承的含义以及声明;

2.理解共有派生、私有派生和保护派生的含义以及使用;

3.理解单派生类中构造函数和析构函数的调用顺序。

5.2 实验内容

5.2.1程序阅读

1.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include "iostream.h"

class CBase

{

public:

CBase(int a)

:a(a)

{

}

protected:

void print()

{

cout<<"a="<<a<<endl;

}

private:

int a;

};

class CDerive : public CBase

{

public:

void print()

{

CBase::print();

cout<<"b="<<b<<endl;

}

private:

要想学习好,努力少不了 学长只能帮你到这了

重庆理工大学C++面向对象程序设计实验

int b;

};

void main()

{

CDerive d;

d.print();

CBase b;

b.print();

}

问题一:以上程序有两大错误,试指出来,并改正之?

答:CBase类中print为保护成员对象不可直接访问。派生类中没有构造函数,加一个构造函数并对参数初始化。CDerive(int n,int a):CBase(a)

{b=n;}

2.理解下面的程序,并在VC++6.0下运行查看结果,回答程序后面的问题。

#include "iostream.h"

class CBase

{

public:

CBase(int a)

:a(a)

{

cout<<"base structure"<<endl;

}

~CBase()

{

cout<<"base destructure"<<endl;

}

void print()

{

cout<<"a="<<a<<endl;

}

protected:

int a;

};

class CDerive : public CBase

{

public:

CDerive(int a, int b,int c)

:CBase(a),b(b),c(c)

{

要想学习好,努力少不了 学长只能帮你到这了

重庆理工大学C++面向对象程序设计实验

cout<<"derive structure"<<endl;

}

~CDerive()

{

cout<<"derive destructure"<<endl;

}

void print()

{

CBase::print();

cout<<"b.a="<<b.a<<endl;

cout<<"c="<<c<<endl;

}

private:

CBase b;

int c;

};

void main()

{

CDerive d(1,2,3); //-----------------------------------------------------①

d.print();

}

问题一:以上程序的输出结果是什么,说明为什么?

答:没有输出结果,因为有错误,说明公有继承派生类不能通过对象访问基类中的保护成员,只有把基类中的a改成公有成员,才可以。

问题二:①处语句执行完后,d.b.a的值为多少?

5.2.2 程序设计

1.定义点CPoint类作为基类,在此基础上派生出直线CLine类和圆CCircle类,并要求基类和各派生类具有以下特点:

a.CLine类含有计算直线长度和斜率的成员函数;

b.CCircle类含有计算圆面积的成员函数。

1. #include "iostream.h"

#include<cmath>

#define pi 3.14159

class CPoint

要想学习好,努力少不了 学长只能帮你到这了

重庆理工大学C++面向对象程序设计实验

{

public:

CPoint(double x1=0,double y1=0)

{

x=x1;y=y1;

}

void print()

{

cout<<"点a的坐标为:("<<x<<","<<y<<")"<<endl;

}

~CPoint(){}

private:

double x,y;

};

class CLine:public CPoint

{

public:

CLine(double x1,double y1,double x2, double y2):CPoint(x1,y1)

{

cout<<"请输入点b的坐标:";

cin>>x2>>y2;x2=x2;y2=y2;

for(;x2-x1==0;)

{cout<<"对不起此斜率不存在"<<endl;

cout<<"重新输入b点坐标:";

cin>>x2>>y2;x2=x2;y2=y2;}

L=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

K=(y2-y1)/(x2-x1);cout<<"直线ab的长度:L="<<L<<'\t'<<"斜率:K="<<K<<endl; //else{

// L=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

// K=(y2-y1)/(x2-x1);cout<<"直线ab的长度:L="<<L<<'\t'<<"斜率:K="<<K<<endl;}

}

~CLine(){}

private:

double x2,y2,L,K;

};

class CCircle:public CPoint

{

public:

CCircle(double x1,double y1):CPoint(x1,y1)

{

cout<<"请输入圆的半径R:";

cin>>R;

要想学习好,努力少不了 学长只能帮你到这了

重庆理工大学C++面向对象程序设计实验

S=pi*R*R;

cout<<"位于点"<<"("<<x1<<","<<y1<<")"<<"处圆的面积S="<<S<<endl;

}

~CCircle(){}

private:double R,S;

};

void main()

{

double x1,y1,x2,y2,R;

cout<<"请输入a点x和y的坐标:";

cin>>x1>>y1;

CPoint a(x1,y1);a.print();

CLine b(x1,y1,x2,y2);

cout<<"请输入圆心坐标:";

cin>>x1>>y1;

CCircle D(x1,y1);

}

2.

#include "iostream.h"

#include<cmath>

#define pi 3.14159

class CPoint

{

public:

CPoint(double x1=0,double y1=0)

{

x=x1;y=y1;

}

void print()

{

cout<<"点a的坐标为:("<<x<<","<<y<<")"<<endl;

}

~CPoint(){}

private:

double x,y;

};

class CLine:public CPoint

{

public:

CLine(double x1,double y1,double x2, double y2):CPoint(x1,y1)

{

cout<<"请输入点b的坐标:";

要想学习好,努力少不了 学长只能帮你到这了

重庆理工大学C++面向对象程 …… 此处隐藏:1829字,全部文档内容请下载后查看。喜欢就下载吧 ……

C++面向对象程序设计实验五 派生与继承.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wenku/1812385.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)