面向对象程序设计实验 - 实验1 C++基础

实验一 C++基础

1.1 实验目的

1.进一步了解和熟悉VC++6.0开发环境,学会在VC++6.0环境下调试程序;

2.熟悉C++中简单的标准输入输出函数的实用;

3.理解const修饰符的作用,并学会应用const修饰符;

4.理解内置(内联)函数的优缺点并学会使用内置函数;

5.理解和使用函数重载以及带默认参数的函数;

6.使用new和delete进行动态内存管理;

7.理解和使用引用。

1.2 实验内容

1.2.1 程序阅读

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

#include <iostream>



int max_def(int x, int y)

{

       return (x>y?x:y);

}

int max_def(int x, int y, int z)

{

       int temp = 0;

       return (temp=(x>y?x:y))>z?temp:z;

}

double max_def(double x, double y)

{

       return (x>y?x:y);

}

int main()

{

       int x1 = 0;

       int x2 = 0;

       double d1 = 0.0;

       double d2 = 0.0;

       x1 = max_def(5,6);

       x2 = max_def(2,3,4);

       d1 = max_def(2.1,5.6);

       d2 = max_def(12.3,3.4,7.8);-----------------------------------------------------①

       cout<<"x1="<<x1<<endl;

       cout<<"x2="<<x2<<endl;

       cout<<"d1="<<d1<<endl;

       cout<<"d2="<<d2<<endl;--------------------------------------------------------②

       return 1;

}

问题一:上述程序的输出结果是什么?

答:   

x1=6

x2=4

d1=5.6

d2=12

问题二:哪些情况可以参与函数的重载?

答:多个重名函数的参数个数和参数类型不同。

问题三:①处调用的是哪个函数?

答:调用函数 int max_def(int x, int y, int z)

问题四:②处的输出结果为什么是d2=12,而不是d2=12.3?

答:d2的值为函数int max_def(int x, int y, int z)得出的,返回值为int型,故取整,丢失小数点后内容。

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

#include <iostream>



int main()

{

       int *p1 = new int; -----------------------------------------------------①

       int *p2 = new int(0); -----------------------------------------------------②

       char *p3 = new char[64]; -----------------------------------------------------③

       return 1;

}

问题一:①、②、③处动态申请内存分别代表什么不一样的意思?

答:①处为给p1所在地址指向一个int型的内存空间,但不进行初始化。②处为给p2所在地址指向一个int型的内存空间,且初始化值为0。③处为给p3所在地址开始指向64个连续的char型内存空间,不进行初始化。

问题二:该程序存在什么隐患?改正该程序使隐患消除。

答:当p1申请失败时,无法成功,返回值为零。改正程序如下:

#include <iostream>

using namespace std;



int main()

{

    int *p1;

    p1 = new int;

    int *p2;

    p2 = new int(0);

    char *p3;

    p3 = new char[64];

    return 1;

}

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

#include <iostream>



void swap(int a, int b)

{

       int temp = a;

       a = b;

       b = temp;

}

void swap(int *a, int *b)

{

       int temp = *a;

       *a = *b;

       *b = temp;

}



int main()

{

       int i = 5;

       int j = 10;

       cout<<"Before swap: i="<<i<<",j="<<j<<endl;

       swap(i,j); -----------------------------------------------------①

       cout<<"After the first swap: i="<<i<<",j="<<j<<endl;

       swap(&i,&j); -----------------------------------------------------②

       cout<<"After the second swap: i="<<i<<",j="<<j<<endl;

      

       return 1;

}

问题一:上述程序的输出结果是什么?

答:    Before swap: i=5,j=10

After the first swap: i=5,j=10

After the second swap: i=10,j=5

问题二:①处函数调用后并不能实现两个数的交换,而②处却可以,为什么?

答:①处为传值,使用void swap(int a, int b)函数,交换的a和b的地址值。②处为传地址,使用void swap(int *a, int *b)函数,交换的a和b的值。

问题三:②处调用的是哪个重载函数?

答:②处调用的void swap(int *a, int *b)函数。

1.2.2 程序设计

1.使用函数重载的方法定义两个同名函数,分别求出整形数平面间两点间距离和双精度平面间两点间距离,如果没有输入第二点的坐标则默认为圆点(0,0)。

答:  

  #include<iostream>

#include<cmath>

using namespace std;



int dis(int x1,int y1,int x2,int y2){

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

    return ans;

}



double dis(double x1,double y1,double x2,double y2){

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

    return ans;

}



int main(){

    cout<<"请输入两个点的坐标,以空格分割"<<endl;

    double x1,y1,x2=0,y2=0;

    cin>>x1>>y1>>x2>>y2;

    cout<<"整型数距离:"<<dis(int(x1),int(y1),int(x2),int(y2))<<endl;

    cout<<"双精度距离:"<<dis(x1,y1,x2,y2)<<endl;

return 0;

}

2、设计一个函数:exchange(float x, float y, float z),当调用exchange(a,b,c)时,将a的内容赋值给b,b的内容赋值给c,c的内容赋值给a,要求采用引用的方式来实现。

答:   

#include<iostream>

#include<cmath>

using namespace std;



void exchange(float &x,float &y,float &z){

    float tmp=x;

    x=z;

    z=y;

    y=tmp;

}



int main(){

    cout<<"请输入三个数,以空格分割:";

    float a,b,c;

    cin>>a>>b>>c;

    cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;

    cout<<"调用exchange函数后:"<<endl;

    exchange(a,b,c);

    cout<<"a="<<a<<",b="<<b<<",c="<<c<<endl;

    return 0;  

}

1.3 思考题

1.自己设计一个程序,测试const的三种用法:指向常量的指针,常指针,指向常量的常指针。

答:  

  #include<iostream>

using namespace std;



int main(){

    int x=1;

    int y=2;

    int * const p1=&x;//指针本身是常量,不可变

    *p1=1;//指向内容可变

    cout<<*p1<<endl;

   

    const int * p2;//指针所指向的内容是常量,不可变

    p2=&x;//指针本身可变

    int const * p3;//指针所指向的内容是常量,不可变

    p3=&y;//指针本身可变

   

    cout<<*p2<<" "<<*p3<<endl;

   

    const int * const p4=&x;//指针本身和指向的内容两者都不可变

    cout<<*p4<<endl;

   

    return 0;  

}

2.编写一个函数,实现两个字符串变量的交换,要求参数用引用。

答:  

  #include<iostream>

#include<cmath>

#include<cstring>

#include<string>

using namespace std;



void swap(string &s1,string &s2){

    string tmp;

    tmp=s1;

    s1=s2;

    s2=tmp;

}



int main(){

    cout<<"请输入两个字符串,以空格分割:"<<endl;

    string s1,s2;

    cin>>s1>>s2;

    cout<<"交换后变量为:"<<endl;

    swap(s1,s2);

    cout<<s1<<" "<<s2<<endl;

    return 0;  

}

  • 7
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验内容: 1.类和对象的定义类和对象的定义类和对象的定义类和对象的定义,实现,实现,实现StudentStudentStudent成绩类的基本员定义成绩类的基本员定义成绩类的基本员定义成绩类的基本员定义成绩类的基本员定义成绩类的基本员定义;类的基本函数功能类的基本函数功能类的基本函数功能类的基本函数功能:学号的学号的提取,成绩的基本计算。提取,成绩的基本计算。提取,成绩的基本计算。提取,成绩的基本计算。提取,成绩的基本计算。 2.构造函数和析构造函数和析构造函数和析构造函数和析构造函数和析,实现对类象自动初始化和释放,实现对类象自动初始化和释放,实现对类象自动初始化和释放,实现对类象自动初始化和释放,实现对类象自动初始化和释放,实现对类象自动初始化和释放,实现对类象自动初始化和释放; 3.静态成员静态成员,实现数据共享,实现数据共享,实现数据共享,实现数据共享,实现数据共享;静态成员函数功能静态成员函数功能静态成员函数功能静态成员函数功能静态成员函数功能:计算N个学生的某科成绩总分和平均个学生的某科成绩总分和平均个学生的某科成绩总分和平均个学生的某科成绩总分和平均个学生的某科成绩总分和平均个学生的某科成绩总分和平均个学生的某科成绩总分和平均分。 4.友元函数和类友元函数和类友元函数和类友元函数和类,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能,实现非类函数对私有据的访问功能;友元函数功能:计算任友元函数功能:计算任友元函数功能:计算任友元函数功能:计算任友元函数功能:计算任友元函数功能:计算任友元函数功能:计算任两个学生的某科成绩差。两个学生的某科成绩差。两个学生的某科成绩差。两个学生的某科成绩差。两个学生的某科成绩差。 5.友元类,实现友元类,实现友元类,实现友元类,实现友元类,实现TeacherTeacherTeacher与StudentStudentStudent类静态数据共享类静态数据共享类静态数据共享类静态数据共享;友元函数功能:通过班号友元函数功能:通过班号友元函数功能:通过班号友元函数功能:通过班号友元函数功能:通过班号友元函数功能:通过班号提取某班科成绩总分和平均。提取某班科成绩总分和平均。提取某班科成绩总分和平均。提取某班科成绩总分和平均。提取某班科成绩总分和平均。提取某班科成绩总分和平均。提取某班科成绩总分和平均。 6.派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能派生类,实现访问基保护成员的功能;派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分派生类函数功能:根据某个学总分计算等级。计算等级。 7.虚函数虚函数,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。,实现虚函数支持的动态联编;功能:为一等学生发放奖金。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_41626672

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值