实验目的及要求:
1.理解并掌握类的定义,实例化的方法。
2.了解类的构造函数和析构函数.
3.学习类成员访问控制的应用。
4.了解类的常数据成员和常函数成员。
5.了解类的静态数据成员和静态成员函数。
6.理解友元函数和友元类;并掌握友元函数的使用。
7.理解构造函数与解析函数的含义及特点。
8.掌握构造函数的几种类型。
9.掌握构造函数和析构函数的执行顺序。
实验环境:
操作系统:
开发环境:
实验内容:
一、指出程序的错误。

  1. 指出下面程序中的错误,并说明原因。
    #include
    using namespace std;
    class CTest{
    public:
    const int y2;
    CTest (int i1,int i2):y1(i1),y2(i2)
    { y1=10;
    x=y1;
    }
    int readme() const;
    //…
    private:
    int x;
    const int y1;
    };
    int CTest::readme() const
    { int i;
    i=x;
    x++;
    return x;
    }
    int main()
    { CTest c(2,8);
    int i=c.y2;
    c.y2=i;
    i=c.y1;
    return 0;
    }
    2.指出下面程序中的错误,并说明原因。
    #include
    using namespace std;
    class CTest{
    public:
    CTest ()
    { x=20;
    }
    void use_friend();
    private:
    int x;
    friend void friend_f(CTest fri);
    };
    void friend_f(CTest fri)
    { fri.x=55;
    }
    void CTest::use_friend()
    { CTest fri;
    this->friend_f(fri);
    ::friend_f(fri);
    }
    int main()
    { CTest fri,fri1;
    fri.friend_f(fri);
    friend_f(fri1);
    return 0;
    }

3.指出下面程序中的错误,并说明原因。
#include
using namespace std;
class CTest{
public:
CTest ()
{ x=20;
}
void use_this();
private:
int x;
};
void CTest::use_this()
{ CTest y,*pointer;
this=&y;
*this.x=10;
pointer=this;
pointer=&y;
}
int main()
{ CTest y;
this->x=235;
return 0;
}

二、编程题
1.构建一个类book,其中含有两个私有数据成员qu(数量)和price(价格), 建立一个有5个元素的数组对象,将qu初始化为1~5,将price 初始化为qu的10倍。显示每个对象的qu*price。
2.定义一个MyString类,实现两个字符串相加。要求定义类的数据成员为字符指针,实现深拷贝函数。
要求:不能使用,可以使用
已知测试函数如下:
int main()
{
MyString str1(“Hello”);
MyString str2(" World!");
str1.MyStrcat(str2);
str1.display(); //输出Hello World!
return 0;
}
3.创建一个名为Temperature 的类,它包含下面的成员:
① 用来保存温度的temp 数据成员;
② 用来保存用户输入的全部温度值的totTemp 静态数据成员,以及用来计数的count静态数据成员;
③ 一个包含来自用户输入的温度值(temp)并且累加totTemp 的成员函数setTemp,把temp 加入totTemp 的当前值;
④ 一个计算和返回每周平均温度的静态成员函数Average()。
已知main( ) 函数如下。其功能为创建Temperature 类的对象数组,调用类成员函数从键盘获得一周的温度,然后计算并且显示平均温度。
已知测试函数为:
int main()
{ Temperature t[10];
double temp;
int i;
for(i=0;i<7;i++)
{ cout<<“输入第”<<i+1<<“天的温度:”<<endl;
cin>>temp;
t[i].setTemp(temp);
}
cout<<“七天的平均温度为:”<<Temperature::Average()<<endl;
return 0;
}
4.编写一个有关股票的程序,其中有两个类:一个是深圳类shen_stock,另一个是上海类shang_stock。类中有三项私有数据成员:普通股票个数general、ST股票个数st和PT股票个数pt,每一个类分别有自己的友元函数来计算并显示深圳或上海的股票总数(三项的和)。两个类还共用一个count(),用来计算深圳和上海总共有多少股票并输出。
要求使用多文件编程。
已知测试程序如下:
int main()
{ shang_stock shanghai(1600,20,10); // 建立对象
// 表示上海有1600支普通股票,20支ST股票, 10支PT股票
shen_stock shenzhen(1500,15,8); // 建立对象
// 表示深圳有1500支普通股票,15支ST股票,8支PT股票
shang_count(shanghai); // 计算上海的股票总数
shen_count(shenzhen); // 计算深圳的股票总数
count(shanghai,shenzhen); // 计算上海和深圳的股票总数
return 0;
}
调试过程及实验结果:
1、输出结果:10
20
本题考查的是引用,k开始为0,执行f(k)后,k变为0+10=10,所以第一个结果输出为10。因为m是引用,所以m和k是同一内存变量,所以m变为20,k的输出也是20.
2、
先对数组a初始化,然后以时间作为标准随机赋值,然后输出随机赋值之后的数。调用maxmin函数,找寻最大值和最小值。在maxmin函数中,用for循环进行数组中各个元素的比较,从而找出最大值和最小值。
3、
在主函数定义字符串型变量s,然后用getline获得字符串,getline的优点在于可以获取空格,然后执行函数tongji,在函数中,用字符串s定义为引用,作为形参,字符串可以直接用[ ]来访问,然后根据字母,数字,空格,和其他字符在ASCII中的位置,来统计个数。
4、
重载函数指的是函数的参数类型不同或者参数类型顺序不同,在这里是参数的类型不同,分别为int 和double,两次调用Max函数,传入不同的参数就调用了对应的函数,编译器会根据传入的实参与几个重载函数主义匹配。
5、
与第4题相比,增加了函数模板和模板函数,但主题思路还是相同,但字符串在比较时,比较的是ASCII码,ASCII对应的数字大,这个字符串就大。函数模板提供了重用程序源代码的有效方法。
调试过程及实验结果:
(详细记录在调试过程中出现的问题及解决方法。记录实验执行的结果,可以截图)
一、改错题
1、
将文件中的const去掉,并将x和y1改为公有,因为私有属性只能访问数据,不能改写。然后加上cout<<i<<endl;就可以输出i的值。这个题目主要考了类的属性private,和public的作用,还有const修饰符的作用,即:在定义常对象时必须赋值,常对象是不能改变的量等知识。
2、
友元函数不属于任何类,不是成员函数,只是为了让含有友元函数的类的成员能被这个友元函数访问。所以,从编译角度来说,只需要将函数user_friend()和main()中的限制符号(就是实例名)去掉,去掉this->friend_f(fri);中的this,因为有元函数可以直接访问private属性,并去掉主函数中的fri.friend_f(fri);中的fri. 因为友元函数不属于任何类,不能用类来访问。本题目主要考察了有元函数的使用和友元函数的作用。
3、 this=&y; *this.x=10; 这两句错误,第一句不能对this直接赋值。第二句应改为this->x=10; 还有main函数中的this->=235错误,this的引用不能在外部函数中。这个题目主要考察了this的用法。
二、编程题
1、
在主函数中,首先建立有5个元素的数组对象,然后分别代入类中。在类中,定义公有属性的运算过程,qu和price定义为私有,这样只能从类内访问qu和price,然后定义show()为输出函数。重点在于建立五个元素的数组对象,并分别赋值1~5.
2、
这个题较为复杂,首先不能用,只能用,所以在整个赋值过程中我们使用的是字符串数组。首先要声明所需的连接函数和输出函数,在连接函数中,需要扩充字符串的长度,也要考虑结尾字符的长度,所以要+1,通过数组的遍历,实现在str1后面接上str2,最后将接好的值赋给str1,再输出。难点在于指针的使用,还有对字符串数组长度的控制,再就是对new动态申请内存空间的应用。
3、
首先,分别在类中声明各个函数,setTemp用于累加,Average函数用来求每周温度的平均值,然后在加上题目要求的主函数,来计算7天的平均温度。题目的关键在于各个成员函数的定义和配合,还要注意静态成员Average和count的使用,既考察了成员函数,又考察了静态成员。
4、
首先,先编写主函数的源程序,再编写上海股票和深圳股票的源程序,在主函数的程序里,调用外部程序深圳股票、上海股票即可完成计算。题目主要考察了多文件编程的方法,还有友元函数的使用。(因为不太会建立多个文件之间的联系,还没能通过编译,只是把程序和主要思路写了出来)
总结:
(对实验结果进行分析,问题回答,实验心得体会,字数150字以上)
1、这一题一定要用引用,注意引用必须初始化,而且引用在初始化时只能绑定左值,不能绑定常量值。要注意引用的使用方法和要求,要熟知引用的定义。
2、我认为第二题重点在于二维数组的使用,找寻最大值和最小值本身这个算法并不复杂。我认为这个题目中对于我的难点是随机赋值,因为这个函数不常用,所以在这方面花费的时间比较多。要注意C++函数库中有max和min函数,所以在定义变量名的时候,要注意不能定义这两个名字。
3、题目的关键在于用getline,输入函数有很多种,我认为getline是最合适的,因为它可以接收空格,还有一个重点是字符串可以直接用[ ]来访问,增加了很大的便利性,最后就是ASCII中字母,数字,空格,等的顺序要记住。

4、本题重新巩固了重载函数的知识点,并没有过难的地方,重点在于如何定义重载函数。

5、函数模板的实现,提供了重用程序源代码的有效方法。模板实现了代码的复用,是一种很有效的工具。也要清楚函数模板是模板;模板函数是函数这个区别
附录:
1、
#include
using namespace std;
int &f(int &i)
{ i+=10;
return i;
}
int main()
{ int k=0;
int &m=f(k);
cout<<k<<endl;
m=20;
cout<<k<<endl;
return 0;
}

2、
#include
#include<time.h>
#include<stdlib.h>
#define random(x)(rand()%x)//生成0到x内的一个随机数 ,然后将这个值赋给random(x)
using namespace std;
void maxmin(int (*a)[4],int &Max,int &Min)//寻找最大值,最小值的函数
{
Max=a[0][0];//进行数组初始化为0
Min=a[0][0];
for(int i=0;i<5;i++)
{
for(int j=0;j<4;j++)
{
if(a[i][j]>Max)
{
Max=a[i][j]; //求最大值的过程
}
else if(a[i][j]<Min)
{
Min=a[i][j]; //求最小值的过程
}
}
}
}
int main()
{
int a[5][4]={0};
srand((int)time(0));//以当前时间对应的int值为随机序列起点
for(int i=0;i<5;i++)
{
for(int j=0;j<4;j++)
{
a[i][j]=random(100);//使用随机函数获得赋值
cout<<a[i][j]<<endl;//输出赋值后数组的值
}
}
int Max=0,Min=0;
maxmin(a,Max,Min);
cout<<“Max=”<<Max<<endl;//输出最大值
cout<<“Min=”<<Min<<endl;//输出最小值
return 0;
}

3、
#include
#include
using namespace std;
void tongji(string &s)//定义一个统计函数,以字符串作为引用,作为形参
{
int zimu=0,kongge=0,shuzi=0,qita=0,i; //字母,数字,空格,其他字符的个数初始化为0
for(i=0; s[i]!=’\0’; i++) //定义for循环函数,用来ASCII查找
{
if(s[i]==32)
kongge++; //在ASCII中,32是空格
else if((s[i]>=48)&&(s[i]<=57))
shuzi++; //在ASCII中,48到57是数字
else if(((s[i]>=97)&&(s[i]<=122))||((s[i]>=65)&&(s[i]<=90)))
zimu++; //在ASCII中,65到90为大写字母AZ,97到122为小写字母az
else
qita++;
} //剩下的在ASCII中为其他字符
cout<<“空格:”<<kongge<<"\n"<<“数字:”<<shuzi<<"\n"<<“字母:”<<zimu<<"\n"<<“其他字符:”<<qita<<endl;
}
int main()
{
string s; //定义字符串s
cout<<“请输入:”<<endl;
getline(cin,s); //从键盘中输入字符串s
tongji(s); //调用函数
return 0;
}

4、
#include
using namespace std;
double Max(double x,double y) //double类型的重载函数
{
if(x>y) //如果a>b,返回a,否则返回b
return x;
else
return y;
}
int Max(int x,int y) //int类型的重载函数
{
if(x>y) // 如果a>b,返回a,否则返回b
return x;
else
return y;
}
int main()
{
int a=6,b=8; //定义a为6,b为8作为例子
cout<<Max(a,b)<<endl;
double c=2.2,d=6.5; //定义c为2.2,b为6.5作为例子
cout<<Max(c,d)<<endl;
return 0;
}

5、
#include
#include
using namespace std;
template //定义函数模板
T Max(T & x,T & y)
{
if(x<y)
return y;
else
return x;
}
int main()
{
int a=6,b=8; //定义a为6,b为8作为例子
cout<<Max(a,b)<<endl;
double c=2.2,d=6.5; //定义c为2.2,b为6.5作为例子
cout<<Max(c,d)<<endl;
string s1=“123ab”;
string s2=“ab123”; //定义s1 s2作为例子
cout<<Max(s1,s2)<<endl;
return 0;
}

面向对象程序设计,实验一 C++函数程序设计相关推荐

  1. c语言程序设计循环结构求奇数和,C语言程序设计实验报告循环结构程序设计.doc...

    C语言程序设计实验报告循环结构程序设计 C语言实验报告 课程__C程序设计_实验名称_循环结构程序设计__第 页 共 页 系 别__电气工程______________________ 实 验 日 期 ...

  2. python大学课程实验六_Python程序设计实验六:函数

    安徽工程大学 Python程序设计 实验报告 班级  物流191   姓名姚彩琴学号3190505129 成绩 日期     2020.5.3     指导老师修宇 [实验目的] 掌握函数的定义与使用 ...

  3. c语言程序设计实验8,C语言程序设计实验八结构体.doc

    C语言程序设计实验八结构体 C语言程序设计实验八:结构体 请求用户输入若干个学生的基本情况,其中包括每位学生的学号.姓名和两门课(C语言.数学)的成绩.然后用下面的格式输出学生的成绩列表. 格式描述如 ...

  4. 计算机程序设计实验报告4答案,程序设计实验报告4

    篇2:<网络程序设计>教师实验报告 <网络程序设计>教师实验报告 本文关键词:实验,教师,报告,网络程序设计 <网络程序设计>教师实验报告 本文简介:<网络程 ...

  5. c语言程序设计实验8,c语言程序设计实验报告8_c语言实验报告格式及实验内容_c语言设计报告...

    实验名称 计算出1000以内10个最大素数之和 实验目的 1.熟练掌握if.if-else.if-else if语句和witch语句格式及使用方法,掌握if语句中的嵌套关系和匹配原则,利用if语句和s ...

  6. C语言程序设计实验14,C语言程序设计——实验.doc

    实验一:VC++集成环境及C程序的运行.调试方法 一.实验目的 了解VC++6.0集成环境: 掌握使用VC++6.0编写程序及运行和调试的方法: 二.实验环境 硬件环境:PC:软件环境:VC++6.0 ...

  7. c语言程序设计实验教学,C语言程序设计实验教学改革研究

    语言程序设计是目前各高校计算机及其相关专业的一门基础课程,也是其它工科专业学生必修的计算机基础课程之一,是学生学习程序设计的入门课程.同时,该课程是一门应用性很强的学科.随着计算机技术飞速发展,计算机 ...

  8. 2022山东理工大学pta程序设计---实验七(函数)题解

    6-1 sdut-C语言实验-计算组合数 分数 10 作者 马新娟 单位 山东理工大学 计算组合数.C(n,m),表示从n个数中选择m个的组合数. 计算公式如下: 若:m=0,C(n,m)=1 否则, ...

  9. 南京邮电大学高级语言程序设计实验三(函数实验)

    一. 实验目的和要求 (1)掌握正确的函数定义与调用,需要时会正确使用函数声明.会正确设置形式参数,理解参数传递及程序的执行流程. (2)理解各种不同存储类别变量的生命期与作用域 (3)进一步熟悉调试 ...

最新文章

  1. 什么样的编程语言,竟然能融资 1.6 亿?
  2. 什么?Spring Boot CommandLineRunner 有坑!?
  3. WebJars 进行 css js 资源文件管理
  4. hadoop2.4.1+hbase0.98.3实现的分布式网盘系统初步(已开源)
  5. yunyang tensorfow-yolo3 训练时权重文件消失的原因和解决办法(max_to_keep)
  6. 预测分析:R语言实现2.6 特征选择
  7. infor wms 项目启动_广汽本田增城工厂No.2L WMS项目正式启动
  8. C语言动态数组建立方法
  9. pcb过孔漏铜_【企业资讯】大正瑞地:专注PCB药水二十年,品质、性能可靠
  10. 会议交流 | 最新NLP核心技术与前沿实践分享!
  11. mysql科目成绩百分比_Mysql学习经验总结【2】
  12. ORACLE 發送郵件(全)
  13. Apache无法加载PHP模块的解决方案
  14. 问题处理——无法导航到插入符号下的符号
  15. 数学:确定性的丧失---第二章 数学真理的繁荣
  16. 事件图谱的构建、推理与应用
  17. 牛客网项目——项目开发(六):点赞,关注和取关,优化登录
  18. linux运行openfoam,OpenFOAM应用的准备工作
  19. 【华为机试真题 Python实现】机器人走迷宫
  20. MYSQL 金额转大写中文

热门文章

  1. 《给中国学生的第三封信——成功、自信、快乐》
  2. 那些年啊,那些事——一个程序员的奋斗史 ——14
  3. 卷积神经网络系列之softmax loss对输入的求导推导
  4. java replica set_K8s 的ReplicaController ReplicaSet DaemonSet和Job
  5. python温度转换_一步一步教会你,详解用Python实现一个简易的温度换算GUI小工具...
  6. 从零开始:教你如何训练神经网络
  7. 如何安装UOS操作系统
  8. HDLC广域网协议设置
  9. NCUT 数据库基础 铁路购票系统
  10. PMP之项目风险管理---实施定量风险分析