当前位置: 首页 > java >正文

【和春笋一起学C++】(三十五)类的使用实例

目录

1、类使用的一些概念

2、类使用的程序实例


1、类使用的一些概念

接上篇文章《【和春笋一起学C++】(三十四)类的设计》,本文结合类使用的一个实例,拓展类的使用方法。

关于类的使用:

C++的目标是使用使用类与使用基本的内置类型(int,double)尽可能相同。

  • 要创建类对象,可以声明类变量,也可以使用new为类对象分配存储空间;
  • 可以将对象作为函数的参数和返回值;
  • 可以将对象使用赋值操作符赋给另一个同类的对象;

要使用一个新类,最关键的是要了解成员函数的功能,而不必考虑其实现细节。

类的定义与类的使用如同“客户/服务器”模型:

客户是使用类的程序。类声明(包括类方法)构成了服务器,它是程序可以使用的资源。客户只能通过公有接口使用服务器,这意味着客户(客户为程序员)唯一的责任是了解该接口。服务器(服务器设计人员)的责任是确保服务器根据该接口准确执行相应任务。服务器设计人员只能修改类设计的实现细节,而不能修改接口。这样对服务器的修改就不会对客户的行为造成意外的影响,且能持续对服务器进行优化。

2、类使用的程序实例

类声明文件,student.h,如下:

#pragma once
#include <iostream>class Student
{
public:Student();~Student();void scoreSet(int yuwen_score_, int shuxue_score_, int yingyu_score_);int get_average_score();
private:std::string name;int num[8];unsigned short yuwen_score;unsigned short shuxue_score;unsigned short yingyu_score;void show_score();
};inline void Student::show_score()
{using namespace std;cout << "语文分数:" << yuwen_score << endl;cout << "数学分数:" << shuxue_score << endl;cout << "英语分数:" << yingyu_score << endl;
}

类方法定义文件,可以命名为student.cpp,如下:

#include "student.h"Student::Student()
{yuwen_score = 80;shuxue_score = 90;yingyu_score = 85;
}Student::~Student()
{
}void Student::scoreSet(int yuwen_score_, int shuxue_score_, int yingyu_score_)
{yuwen_score = yuwen_score_;shuxue_score = shuxue_score_;yingyu_score = yingyu_score_;
}int Student::get_average_score()
{using namespace std;show_score();int average= (yuwen_score + shuxue_score + yingyu_score) / 3;cout << "平均分:" << average << endl;return average;
}

使用类的程序文件,test.cpp

#include "test.h"void show_student_score(Student& st)
{st.get_average_score();
}int main()
{Student *pt_student = new Student;std::cout << "pt_student:" << std::endl;pt_student->get_average_score();delete pt_student;Student student2;student2.scoreSet(78, 99, 81);std::cout << "student2:" << std::endl;student2.get_average_score();Student student3;student3 = student2;std::cout << "student3:" << std::endl;student3.get_average_score();Student student4;std::cout << "student4:" << std::endl;show_student_score(student4);return 0;
}

程序说明:

1. Student *pt_student = new Student;

该语句声明了一个指向Student类的指针,如同指向内置变量指针的声明方式:int *pt_i = new int;

在声明指向Student类的指针时,new Student 运算符在堆(Heap) 内存中动态分配了一块足够大的内存空间,用于存储一个 Student 类对象;

  • new Student:返回一个指向新创建的Student对象的指针;
  • Student *pt_student:声明了一个指向Student类对象的指针变量pt_student,这个指针被赋值为new返回的地址,因此,pt_student指向堆上那个新创建的Student对象;

由于pt_student是一个指向Student对象的指针,所以在调用成员函数时需要使用指针的成员选择操作符“->”。最后,如同内置变量一样,需要使用delete手动释放为Student类对象分配的内存空间。

2. student3 = student2;

该语句的含义是将student2对象中数据成员的值赋给student3对象中对应数据成员的值,同类的对象之间可以互相赋值。这与内置变量一样,int变量之间可以互相赋值。

3. test.cpp文件中show_student_score()函数将Student类对象作为函数参数,之前的文章中讲过,将类对象用作函数参数时,一般将类对象的引用作为函数的参数,这样可以减少数据拷贝的时间,提高程序运行效率。

http://www.xdnf.cn/news/18688.html

相关文章:

  • 1.Spring Boot:超越配置地狱,重塑Java开发体验
  • 逆光场景识别率↑76%!陌讯多模态融合算法在手机拍照识别的落地实践​
  • centos安装jenkins
  • 校园跑腿小程序源码 | 跑腿便利店小程序 含搭建教程
  • bun + vite7 的结合,孕育的 Robot Admin 【靓仔出道】(十八)
  • 目标检测数据集 第005期-基于yolo标注格式的PCB组件检测数据集(含免费分享)
  • JavaScript数据结构详解
  • 智元精灵GO1 agibot数据转换Lerobot通用格式数据脚本
  • [创业之路-567]:数字技术、数字产品、数字资产、数字货币、数字企业、数字经济、数字世界、数字人生、数字智能、数字生命
  • 大模型知识--Function Calls
  • element-plus穿梭框transfer的调整
  • 【实习总结】快速上手Git:关键命令整理
  • AI版权保护破局内容行业痛点:侵权识别效率升89%+维权周期缩至45天,区块链存证成关键
  • vue中 computed vs methods
  • unity热更新总结
  • Linux的线程概念与控制
  • CTFshow系列——命令执行web49-52
  • 基于深度学习的眼疾识别系统:从血细胞分类到病理性近视检测
  • 计算机网络:聊天室(UDP)
  • 用户和组笔记
  • 大数据毕业设计选题推荐-基于大数据的北京市医保药品数据分析系统-Spark-Hadoop-Bigdata
  • 基于角色的访问控制(RBAC)研究与Go语言实现
  • 商超客流密度统计误差率↓35%!陌讯多模态融合算法在零售智慧运营的实战解析
  • 美股期权历史市场数据波动特性分析
  • power query自定义查询函数(中午休息一小时
  • 基于Spark的热门旅游景点数据分析系统的设计-django+spider
  • 基于springboot的理商管理平台设计与实现、java/vue/mvc
  • pom.xml 标签整理各个标签的用途和含义
  • 复杂场景鲁棒性突破!陌讯自适应融合算法在厂区越界检测的实战优化​
  • 57 C++ 现代C++编程艺术6-类的内部类