西安石油大学C++上机实验 上机一:类与对象程序设计(2学时)

简介: 上机目的掌握声明类的方法。掌握类和类的成员的概念以及定义对象的方法。掌握构造函数和析构函数的使用方法

上机一:类与对象程序设计(2学时)


上机目的


掌握声明类的方法。

掌握类和类的成员的概念以及定义对象的方法。

掌握构造函数和析构函数的使用方法


实验目的


掌握声明类的方法,类和类的成员的概念以及定义对象的方法。


掌握用类和对象编制基本对象的程序的方法。


掌握构造函数和析构函数的使用方法。


上机内容


1.进行类的设计和使用,练习构造函数的重载和析构函数的使用方法;练

习具有不同访问权限的成员的访问方式;


2.测试章节例题,完成教材 P101:3.34,3.35。


题目 1:编写一个基本账户类,成员变量包括:账号,储户姓名,和存款余

额,成员函数包括:存款和取款。编写一个测试程序进行测试。


题目 2:设计一个长方形类,成员变量包括长度和宽度,成员函数除包括计

算周长和计算面积外,还包括用 Set 方法设置长和宽,以及用 get 方法来获取长

方形的长和宽。


实验内容


P101:3.34, 3.35


题目 1:编写一个基本账户类,成员变量包括:账号,储户姓名,和存款余额,成员函数包括:存款和取款。编写一个测试程序进行测试。


思路:


编辑头文件。在弹出的 Account.h 头文件中添加 Account 类的代码。如图

1-5 所示。详细代码如下:


步骤 a:声明程序设计所需要包含的头文件:

#include <iostream.h>

#include <string.h>

步骤 b:根据题目要求:定义账户类:Account 类:

class Account

{

……

7

8

};


步骤 c:在 Account 类中定义成员变量:

private:

long accountNo; //账户

char name[30]; //储户姓名

float money; //账户余额


步骤 d:定义成员函数:

构造函数:

(这些都是在account中的东西(变量))

Account(long a,char *n,float b): accountNo(a),money(b){

strcpy(name,n);

}


析构函数:

~Account(){}


存款成员函数:

void Add(const float x){

money=money+x;

}


取款成员函数:

void Sub(const float x){

money=money-x;

}


输出成员函数:

void Print(void)const{

cout<<"姓名:"<<name<<endl;

cout<<"账户:"<<accountNo<<endl;

cout<<"余额:"<<money<<endl;

}


4)添加源文件代码。在 Account.cpp 文件中添加主程序代码,详细代码如下:


a:测试主程序详解:

#include "Account.h" //包含 Account.h 头文件(此时应该注意“”这个符号应该出现在知道头文件位置的地方当不确定Account在何处时会报错)

void main()

{

//一个萝卜一个坑,对定义的对象类进行赋值初始化定义

Account a1(1000000,"阿斌",100); //定义对象,对象名为 a1,其账号为 1000000,储户姓名为阿斌,账户余额为 100 元

Account a2(1000001,"阿豪",100); //定义对象,对象名为 a2,其账号为 1000001,储户姓名为阿豪,账户余额为 100 元

cout<<"名为阿斌的用户向账户存款 50 元"<<endl;

//此时程序的意思就是对构造的a1对象进行Add函数操作

a1.Add(50); //对象 a1 调用 Add 存款成员函数向账户存款 50 元

//此时程序的意思就是对构造的a1对象进行Print函数操作

a1.Print(); //对象 a1 调用 Print 成员函数输出显式账号、姓名、余额

cout<<endl; //换行

cout<<"名为阿豪的用户从账户取款款 50 元"<<endl;

a2.Sub(50); //对象 a2 调用 Sub 取款成员函数从账户取款 50 元

a2.Print(); //对象 a2 调用 Print 成员函数输出显式账号、姓名、余额

}




完整源码:



#include<iostream>

#include<string>

using namespace std;

class zhanghu {

public:

std::string name;

long int ZH;

int CKYE;

zhanghu(){}

zhanghu(string _name, long int y = 12345678, int z = 100) {

 name = _name;

 ZH = y;

 CKYE = z;

}

int CK(int a) {

 CKYE += a;

 return CKYE;

}

int QK(int b) {

 CKYE -= b;

 return CKYE;

}

~zhanghu()

{}

};

int main() {

int n, o, p;

zhanghu m("chenbochao", 12345678, 100);

cout << "您的姓名是" << m.name << endl << "账号是" << m.ZH << endl << "余额是" << m.CKYE << endl;

cout << "--------------------------" << endl;

cout << "请输入操作" << endl <<"1存款" << endl << "2取款" << endl;

cout << "--------------------------" << endl;

while (scanf("%d", &n) != EOF) {

 if (n == 1) {

  cout << "请输入存款金额:" << endl;

  cin >> o;

  cout << "--------------------------" << endl;

  m.CK(o);

  cout << "您的姓名是" << m.name << endl << "账号是" << m.ZH << endl << "余额是" << m.CKYE << endl;

  cout << "--------------------------" << endl;

 }

 if (n == 2) {

  cout << "请输入取款金额:" << endl;

  cin >> p;

  cout << "--------------------------" << endl;

  m.QK(p);

  cout << "您的姓名是" << m.name << endl << "账号是" << m.ZH << endl << "余额是" << m.CKYE << endl;

  cout << "--------------------------" << endl;

 }

}

return 0;

}



题目 2:设计一个长方形类,成员变量包括长度和宽度,成员函数除包括计算周长和计算面积外,还包括用 Set 方法设置长和宽,以及用 get 方法来获取长


方形的长和宽


1)创建头文件。在工程主界面左上角点击 File 菜单,在弹出的 New 对话框

中选择 C/C++ Header File 选项,新建头文件命名为 Rectangle.h。用来设计长方形类。


2)编辑头文件。在弹出的 Rectangle.h 头文件中添加 Rectangle 类的代码。



步骤 a:声明程序设计所需要包含的头文件:


#include <iostream.h>


步骤 b:根据题目要求:定义长方形类:Rectangle 类:


class Rectangle

{

……

};


步骤 c:在 Rectangle 类中定义成员变量:


private:

float length; //长

float width; //宽


步骤 d:定义成员函数:

构造函数:

Rectangle(float len = 1, float wid = 1):length(len), width(wid){}


析构函数:


~ Rectangle (){}


//定义函数功能

计算长方形周长的成员函数:


float Perimeter(){

return 2*(length + width);

}


计算长方形面积的成员函数:

double Area() {

return length*width;

}


设置长方形长的成员函数:

void SetLength(float len)

{

length = len;

}


设置长方形宽的成员函数

void SetWidth(float wid)

{

width = wid;

}


获取长方形长的成员函数


float GetLength()

{

return length;

}

获取长方形宽的成员函数


float GetWidth()

{

return width;

}


步骤 e:程序编写示例

3)创建源文件。在工程主界面左上角点击 File 菜单,在弹出的 New 对话框

中选择 C++Source File 选项,新建头文件命名为 Rectangletest.cpp。用来测试长

方形类。



4)编辑源文件。在弹出的 Rectangletest.cpp 头文件中添加测试主程序代码。

a.详细代码:

#include "Rectangle.h" //包含 Rectangle.h 头文件

void main()

{

Rectangle Rec1, Rec2(10, 10);

cout<<"长:"<<Rec1.GetLength()<<" 宽:"<<Rec1.GetWidth()<<endl;

cout<<"周长:"<<Rec1.Perimeter()<<" 面积:"<<Rec1.Area()<<endl<<endl;

Rec1.SetLength(5);

Rec1.SetWidth(8);

cout<<"长:"<<Rec1.GetLength()<<" 宽:"<<Rec1.GetWidth()<<endl;

cout<<"周长:"<<Rec1.Perimeter()<<" 面积:"<<Rec1.Area()<<endl<<endl;

cout<<"长:"<<Rec2.GetLength()<<" 宽:"<<Rec2.GetWidth()<<endl;

cout<<"周长:"<<Rec2.Perimeter()<<" 面积:"<<Rec2.Area()<<endl<<endl;

}


#include<iostream>

using namespace std;

class CF {//定义CF类

public:

int C;

int K;

CF()

{}

//定义函数功能

void set(){

 cout << "请输入长度" << endl;

 cin >> C;

 getchar();

 cout << "请输入宽度" << endl;

 cin >> K;

}

void get() {

 cout << "长度为:" << C << endl;

 cout << "宽度为:" << K << endl;

}

int ZC() {

 int c;

 c = 2 * (C + K);

 return c;

}

int MJ() {

 int c;

 c = C * K;

 return c;

}

~CF()

{}

};

int main() {

int a;

int c, d;

CF m;

m.set();

cout << "--------------------------" << endl;

m.get();

cout << "--------------------------" << endl;

cout << "请选择操作:" << endl << "1:求周长" << endl << "2:求面积" << endl;

cout << "--------------------------" << endl;

while (scanf("%d", &a) != EOF) {

 if (a == 1) {

  cout << "周长是" << m.ZC() << endl;

 }

 else if (a == 2) {

  cout << "面积是" << m.MJ() << endl;

 }

}

return 0;

}


思考题


分析总结上述程序设计实现的不足之处,如账户类中当取款金额大于账户原

有余额时,应如何操作?如长方形类结果输出采用函数调用方式是否更为方便?

如若要实现两个长方形对象的面积加和时又该如何进行程序设计?请针对程序

中的不足之处进行完善修改,并思考如何进行功能拓展。

目录
相关文章
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
89 0
|
3月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
167 0
|
5月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
175 12
|
6月前
|
编译器 C++
类和对象(中 )C++
本文详细讲解了C++中的默认成员函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载等内容。重点分析了各函数的特点、使用场景及相互关系,如构造函数的主要任务是初始化对象,而非创建空间;析构函数用于清理资源;拷贝构造与赋值运算符的区别在于前者用于创建新对象,后者用于已存在的对象赋值。同时,文章还探讨了运算符重载的规则及其应用场景,并通过实例加深理解。最后强调,若类中存在资源管理,需显式定义拷贝构造和赋值运算符以避免浅拷贝问题。
|
6月前
|
存储 编译器 C++
类和对象(上)(C++)
本篇内容主要讲解了C++中类的相关知识,包括类的定义、实例化及this指针的作用。详细说明了类的定义格式、成员函数默认为inline、访问限定符(public、protected、private)的使用规则,以及class与struct的区别。同时分析了类实例化的概念,对象大小的计算规则和内存对齐原则。最后介绍了this指针的工作机制,解释了成员函数如何通过隐含的this指针区分不同对象的数据。这些知识点帮助我们更好地理解C++中类的封装性和对象的实现原理。
|
6月前
|
编译器 C++
类和对象(下)C++
本内容主要讲解C++中的初始化列表、类型转换、静态成员、友元、内部类、匿名对象及对象拷贝时的编译器优化。初始化列表用于成员变量定义初始化,尤其对引用、const及无默认构造函数的类类型变量至关重要。类型转换中,`explicit`可禁用隐式转换。静态成员属类而非对象,受访问限定符约束。内部类是独立类,可增强封装性。匿名对象生命周期短,常用于临时场景。编译器会优化对象拷贝以提高效率。最后,鼓励大家通过重复练习提升技能!
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
6月前
|
设计模式 安全 C++
【C++进阶】特殊类设计 && 单例模式
通过对特殊类设计和单例模式的深入探讨,我们可以更好地设计和实现复杂的C++程序。特殊类设计提高了代码的安全性和可维护性,而单例模式则确保类的唯一实例性和全局访问性。理解并掌握这些高级设计技巧,对于提升C++编程水平至关重要。
127 16
|
7月前
|
编译器 C语言 C++
类和对象的简述(c++篇)
类和对象的简述(c++篇)
|
6月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
342 6