C++面向对象程序设计 - 创建学生类

        在20世纪80年代提出了面向对象的程序设计(Object oriented programming, OOP)思想,在此形势下,C++由AT&TBell(贝尔)实验室于20世纪80年代初在C语言的基础上开发成功,C++保留了C语言原有的所有优点,增加了面向对象的机制。为了强调它是C语言的增强版本,用了C语言的自加运算符“++”,改称为C++。

        如果你有Java、C#、PHP、NodeJs等语言基础,再来了解C++,会发现它们在面向对象编程方面有许多相似之处,有封装、继承、多态、类与对象、访问个修饰符等。

        这里通过一个简单的程序,了解下C++对象是如何声明和实例的。

一、实例学生类

        在C++中,输出流cout必须和输出运算符“<<”一起使用,"<<"在这里不是作为位运算的左移运算符,而是起插入的作用。标准输入流cin是从键盘向内存流动的数据,用">>"运算符从输入设备键盘取得数据送到输入流cin中。

#include <iostream>		//下面用到的cin输入和cout输出时需要用到此头文件
using namespace std;	//使用命名空间std
/**
 * 学生类
 */
class Student{
	// 定义私有属性
	private:
		char name[10];
		int num;
		int score;
	// 定义对外函数
	public:
		// 输入数据
		void setdata(){
			cin >> name;
			cin >> num;
			cin >> score;
		}
		// 显示内容
		void display(){
			cout << "- - - - - - - - - - - - - - - - - - - - - - " << endl;
			cout << "name:" << name << endl;
			cout << "num=" << num << endl;
			cout << "score=" << score << endl;
		};
};

// 定义Student对象变量stud1, stud2
Student stud1, stud2;

int main(){
	// 输入姓名、学号、成绩
	stud1.setdata();
	stud2.setdata();
	// 输出结果
	stud1.display();
	stud2.display();
}

        编译结果如下:

        运行结果如下:

二、比较成绩

        增加maxScore()函数,用来比较学生间成绩最高分,代码如下:

#include <iostream>		//下面用到的cin输入和cout输出时需要用到此头文件
using namespace std;	//使用命名空间std
/**
 * 学生类
 */
class Student{
	// 定义私有属性
	private:
		char name[10];
		int num;
		int score;
	// 定义对外函数
	public:
		// 输入数据
		void setdata(){
			cin >> name;
			cin >> num;
			cin >> score;
		}
		// 显示内容
		void display(){
			cout << "- - - - - - - - - - - - - - - - - - - - - - " << endl;
			cout << "name:" << name << endl;
			cout << "num=" << num << endl;
			cout << "score=" << score << endl;
		}
		// 获取成绩
		int getScore(){
			return score;
		}
		// 获取姓名
		char* getName(){
			return name;
		};
};

// 判断成绩大小
Student maxScore(Student s1, Student s2){
	return s1.getScore() > s2.getScore() ? s1 : s2;
}

// 定义Student对象变量stud1, stud2
Student stud1, stud2;

int main(){
	// 输入姓名、学号、成绩
	stud1.setdata();
	stud2.setdata();
	// 输出结果
	stud1.display();
	stud2.display();
	// 计算最高成绩
	Student ms = maxScore(stud1, stud2);
	cout << "- - - - - - - - - - - - - - - - - - - - - - " << endl;
	cout << ms.getName() << " had the highest score with a score of " << ms.getScore() << endl;
}

        编译结果如下:

        运行结果如下:

三、char和char*区别

        char和char*在C++中有显著的区别,主要体现在数据类型、内存占用、值和用途以及字符串的表示等方面。char和char*在C++中各有其独特的用途和特性,理解它们的区别对于正确编写和使用C++程序至关重要。

  • char是C++中的基本数据类型,表示一个字符,它占据一个字节的内存空间,可以存储ASCII码表中的任意一个字符。
  • char*通常用于表示字符串或字符数组的起始位置,指向一个以空字符('\0')结尾的字符数组,这样就可以表示一个字符串。

错误写法(会报错误:[Error] invalid conversion from 'char*' to 'char' [-fpermissive]):

char getName(){
    return name;
};

正确写法:

char* getName(){
    return name;
};

四、右对齐

        要想实现内容右对齐,可以使用控制符setw设置(注意:若使用setw,必须包含头文件iomanip),否则会报错:[Error] 'setw' was not declared in this scope; did you mean 'getw'?,错误中已提示当前此范围内未声明setw,通过#include引入即可。

        另外,若超出设置设置列数,则按实际长度输出。

        代码如下:

#include <iostream>		//下面用到的cin输入和cout输出时需要用到此头文件
#include <iomanip>		// setw设置时需要用到此头文件
using namespace std;	//使用命名空间std
/**
 * 学生类
 */
class Student{
	// 定义私有属性
	private:
		char name[10];
		int num;
		int score;
	// 定义对外函数
	public:
		// 输入数据
		void setdata(){
			cin >> name;
			cin >> num;
			cin >> score;
		}
		// 显示内容
		void display(){
			cout << "- - - - - - - - - - - - - - - - - - - - - - " << endl;
			cout << setw(6) << "name:" << setw(8) << name << endl;
			cout << setw(6) << "num=" << setw(8) << num << endl;
			cout << setw(6) << "score=" << setw(8) << score << endl;
		}
		// 获取成绩
		int getScore(){
			return score;
		}
		// 获取姓名
		char* getName(){
			return name;
		};
};

// 判断成绩大小
Student maxScore(Student s1, Student s2){
	return s1.getScore() > s2.getScore() ? s1 : s2;
}

// 定义Student对象变量stud1, stud2
Student stud1, stud2;

int main(){
	// 输入姓名、学号、成绩
	stud1.setdata();
	stud2.setdata();
	// 输出结果
	stud1.display();
	stud2.display();
	// 计算最高成绩
	Student ms = maxScore(stud1, stud2);
	cout << "- - - - - - - - - - - - - - - - - - - - - - " << endl;
	cout << ms.getName() << " had the highest score with a score of " << ms.getScore() << endl;
}

        编译结果如下:

        运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/464624.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(C语言)整数在内存中的存储与大小端

1. 整数在内存中的存储 整数的2进制表示方法有三种 &#xff0c;即 原码、反码和补码 有符号类型数据三种表示方法均有符号位和数值位两部分 &#xff0c;符号位都是用0表示“正” &#xff0c;用1表示“负” &#xff0c;最高位的一位是被当做符号位 &#xff0c;剩余的都是…

智慧公厕建设的主要目标是什么?

随着城市化进程的不断推进&#xff0c;公共厕所作为城市基础设施的重要组成部分&#xff0c;也变得越来越重要。为了提升公共厕所的管理水平、提供更好的服务质量&#xff0c;智慧公厕应运而生。智慧公厕的建设旨在通过信息化手段实现公共厕所的全面感知监测&#xff0c;实现公…

VGG论文学习笔记

题目&#xff1a;VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION 论文下载地址&#xff1a;VGG论文 摘要 目的&#xff1a;研究深度对精度的影响 方法&#xff1a;使用3*3滤波器不断增加深度&#xff0c;16和19效果显著 成绩&#xff1a;在ImageNet 20…

C++ 智能指针的使用

智能指针类型 在C程序中&#xff0c;普通变量使用栈内存&#xff0c;为函数运行时专用&#xff0c;结束后会自动释放&#xff0c;无须考虑内存释放问题。 但堆内存是共用的&#xff0c;其使用是通过指针变量的new来分配&#xff0c;使用delete来释放&#xff0c;因指针使用方便…

AI预测-一文解析AI预测数据工程

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

Flink程序员开发利器本地化WebUI生成

前言 在flink程序开发或者调试过程中&#xff0c;每次部署到集群上都需要不断打包部署&#xff0c;其实是比较麻烦的事情&#xff0c;其实flink一直就提供了一种比较好的方式使得开发同学不用部署就可以观察到flink执行情况。 上代码 第一步&#xff1a;开发之前需要引入在本…

中间件漏洞(redis)

目录 1.Redis服务器被挖矿案例 2.redis常见用途 3.redis环境配置 4.redis的持久化机制 5.redis动态修改配置 6.webshell提权案例 7.定时任务bash反弹连接提权案例 8.SSH Key提权案例 9.redis安全加固分析 1.Redis服务器被挖矿案例 我没有体验过&#xff0c;那就看看别…

Flutter:构建美观应用的跨平台方案

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【Fitten Code】“吊打“Github Copilot的国内免费代码辅助插件

&#x1f33b;个人主页&#xff1a;相洋同学 &#x1f947;学习在于行动、总结和坚持&#xff0c;共勉&#xff01; 目录 1.Github Copilot 2.Fitten Code 2.1 对话体验&#xff1a; 2.2 代码补全体验&#xff1a; 2.3 Pycharm安装方法&#xff1a; 2.4 Vscode安装方法…

git基础命令(一)

目录 基础概念git statusgit addgit diffgit loggit commit文件可以处于以下三种状态之一远程存储库与本地存储库参考 用于知识记录。后续有新的的内容&#xff0c;例子&#xff0c;将持续更新本文档。 基础概念 工作树&#xff1a;git add 之前&#xff0c;变动内容的文件列表…

Linux课程_____用户的管理

一、规则 用户至少属于一个组,在创建时如果不指定组,将会创建同名的组 用户只能有一个基本组(主组),但可以隶属于多个附加组 如果一个组作为某用户的基本组,此组将不能被删除 UID: 用户标识 GID: 组的标识 root管理员的uid及gid 都为0 二、用户的配置文件 1./etc/passwd …

<c语言学习> 整数和浮点数的存储方式

1.整数 有符号整数 第一位为符号位 1代表负数 0代表正数 举例&#xff1a; signed char 8 ---------------------> 0000 1000 -8 ----------------------> 1111 1000 &#xff08;补码形式存储&#xff09; 补码存储&#xff08;计算&#xff09;的妙处&…

Discourse 分类图片

我们可以在 Discourse 上为分类添加图片。 进入分类编辑界面&#xff0c;然后选择 Image 标签。 在 Images 标签下&#xff0c;上传分类需要的图片。 图片大小 图片的大小是 Discourse 进行控制的&#xff0c;高度为 150 PX 像素。 如果上传的图片大于 150 px 的高度像素&…

【JavaSE】类与对象

前言 Java是一门纯面向对象的语言&#xff0c;在面向对象的世界里&#xff0c;一切都为对象。它是解决问题的一种思想&#xff0c;主要依靠对象之间的交互完成一件事情。类与对象是我们学习面向对象最基础的知识&#xff0c;是面向对象实现的基石&#xff0c;可见它是有多么重…

打破数据孤岛,TDengine 与 Tapdata 实现兼容性互认证

当前&#xff0c;传统行业正面临着数字化升级的紧迫需求&#xff0c;但海量时序数据的处理以及数据孤岛问题却日益突出。越来越多的传统企业选择引入时序数据库&#xff08;Time Series Database&#xff0c;TSDB&#xff09;升级数据架构&#xff0c;同时&#xff0c;为了克服…

cesium 动态立体墙效果

cesium 动态立体墙效果 以下为源码直接复制可用 实现效果 实现思路 通过修改“material”自定义材质实现动态效果 核心类(WallImageTrailMaterialProperty)自定义材质 class WallImageTrailMaterialProperty {constructor(options) {this

推荐一款好用的前端分页插件jqPaginator

jqPaginator 简洁、高度自定义的jQuery分页组件&#xff0c;适用于多种应用场景。 现在网上各种各样的分页组件很多&#xff0c;但是很难找到十分“称心如意”的&#xff0c;于是jqPaginator诞生了。 我心中理想的分页组件&#xff0c;要不受CSS框架限制&#xff0c;可以使用…

汽车电子零部件(6):DMS/OMS、CMS

前言: 有一个部件过去不曾有,而如今有可能要标准化标配化,那就是Driver Monitoring System (DMS)驾驶员监控系统、Occupant Monitoring System (OMS)乘客监控系统和Camera Monitor System(CMS)摄像头监控系统。 汽车视觉技术的创新推动先进驾驶辅助系统的变革(ADAS),并…

力扣39. 组合总和

Problem: 39. 组合总和 文章目录 题目描述思路及解题方法复杂度Code 题目描述 思路及解题方法 该问题是组合问题的一个变体&#xff0c;可以归纳为元素无重复可复选问题&#xff0c;其代码的实现几乎和组合问题一模一样&#xff0c;由于在组合问题中我们只需要利用一个变量在递…

汽车电子与软件架构概述

汽车电子与软件架构概述 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师 (Wechat:gongkenan2013)。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 本就是小人物,输了就是输了,不要在意别人怎么看自己。江湖一碗茶,喝完再挣扎,出门靠自己…