• 面向对象实验一 类的建立与应用


    一、实验目的

    类构成了实现 C++面向对象程序设计的基础。类是 C++封装的基本单元,它把数据和函

    数封装在一起。当类的成员函数声明为保护时,外部不能访问;声明为公共时,则在任何地

    方都可以访问。

    通过建立类来掌握面向对象程序设计中类的封装性、数据保护等特性以及构造函数、

    析构函数,掌握系统什么时候自动缺省构造函数和缺省析构函数。要求掌握声明和定义类和

    成员函数的方法,掌握访问成员函数的方法,理解保护数据如何屏蔽外部访问的原理,使得对

    类的封装有更好的认识。

    成员函数的定义:

    1. 在类中定义成员函数:在类中定义的成员函数一般规模都比较小,语句只有 1~5

    句,而且特别是不允许使用 switch 语句,它们一般为内联函数,即使没有明确使

    用 inline 标示。

    2. 在类之后定义成员函数:对于大的成员函数,直接把代码放到类定义中使用起来

    十分不方便。为了避免这种情况,C++允许在其他地方定义成员函数。

    将类定义和其成员函数定义分开,是目前开发程序的通常做法。我们把类定义(头文件)

    看成是类的外部接口,类的成员函数定义看成是内部实现。

    二、实验内容

    使用 Visual  C++6.0 建立一个复数类,并编制主程序来验证对所创建的复数类的操作

    的正确性。

    三、实验要求

    1、有两个私有的成员 x 和 y;

    2、分别有一个带参数构造函数和无参数构造函数;

    3、定义一个可以显示复数的实部和虚部的成员函数。

    四、思考题

    1、该复数没有定义析构函数(如果使用 Visual C++ 6.0 创建类,则会自动为该类生成析

    构函数),系统会怎样做?

    2、如果定义该复数类的对象时不带参数,是否可以?如果不行,是何原因?

    实验代码:

    //sy1.h

    #ifndef SY1_H_

    #define SY1_H_

    #include

    using namespace std;

    class fushu

    {

    private://私有函数,只限内部函数访问即public里的函数

    double shi;

    double xu;

    public://与外部的接口

    fushu();

    fushu(double s, double x);//不能带默认参数,会产生歧义或者不全带默认参数

    void show();

    };

    #endif

    //sy1.cpp

    //#include

    #include"sy1.h"

    //using namespace std;

    fushu::fushu()

    {

    shi = 0.0;

    xu = 0.0;

    }

    fushu::fushu(double s, double x) :shi(s), xu(x)//我用初始化列表,可以写在里面

    {

    }

    void fushu::show()

    {

    if (xu >= 0)

    cout << shi << "+" << xu << "j" << endl;

    else

    cout << shi << xu << "i" << endl;

    }

    /*假设你的工程里面有4个文件,分别是a.cpp,b.h,c.h,d.h。  

    a.cpp的头部是:

    #include   "b.h "  

    #include   "c.h "  

    b.h和c.h的头部都是:

    #include   "d.h "  

    而d.h里面有class   D的定义。

    这样一来,

    编译器编译a.cpp的时候,先根据#include   "b.h "去编译b.h这个问题,再根据b.h里面的#include   "d.h ",去编译d.h的这个文件,这样就把d.h里面的class   D编译了;

    然后再根据a.cpp的第二句#include   "c.h ",去编译c.h,最终还是会找到的d.h里面的class   D,但是class   D之前已经编译过了,所以就会报重定义错误。 加上ifndef / define / endif,就可以防止这种重定义错误。

    所以还是把头文件的内容都放在#ifndef和#endif中吧。

    不管你的头文件会不会被多个文件引用,你都要加上这个。*/

    //user.cpp

    #include

    #include"sy1.h"

    using namespace std;

    int main()

    {

    double shi;

    double xu;

    fushu a;//测试默认构造函数

    a.show();

    cout << "please enter a complex number: " << endl;

    cout << "please enter real part:";

    cin >> shi;

    cout << "please enter imaginary part:";

    cin >> xu;

    fushu b(shi, xu);

    b.show();

    return 0;

    }

    思考题1:该复数没有定义析构函数(如果使用 Visual C++ 6.0 创建类,则会自动为该类生成析构函数),系统会怎样做?

    答:系统会自动分配一个析构函数给它。

    思考题2:如果定义该复数类的对象时不带参数,是否可以?如果不行,是何原因?

    答:可以,系统则自动调用无参构造函数。

  • 相关阅读:
    【Django-GAGA系统】添加用户时自动追加权限-20220801
    Jetpack:014-Jetpack中的小红点
    JPA - Hibernate
    基于强化学习的测试日志智能分析实践
    为什么重写equals 时必须重写 HashCode 方法?
    数据库-基础篇-SQL-DML(数据操作语言)
    【观察】联想“以行践言”,赋能专精特新驶入成长“快车道”
    数据结构(DS)C语言版:学习笔记(三):算法和算法分析
    JAVA 实现《泡泡堂对战版》游戏
    亚马逊 CodeWhisperer 初体验
  • 原文地址:https://blog.csdn.net/night__wind/article/details/127914350