【和春笋一起学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类对象作为函数参数,之前的文章中讲过,将类对象用作函数参数时,一般将类对象的引用作为函数的参数,这样可以减少数据拷贝的时间,提高程序运行效率。