结构体struct和类class
一、结构体structC 中的struct结构体是一种自定义数据类型核心作用是将不同类型但相关联的数据封装在一起形成一个整体。它是 C 面向对象编程的基础之一甚至可以看作轻量级的类特别适合像「学生信息姓名 生日 输入顺序」这类需要聚合多个数据的场景。// 语法struct 结构体名 { 成员变量列表; }; struct Student { // 成员变量可以是不同类型 string name; // 姓名字符串类型 int year; // 出生年整型 int month; // 出生月整型 int day; // 出生日整型 int idx; // 输入顺序整型 }; // 注意结尾必须加分号1.结构体初始化和调用#include iostream #include string using namespace std; struct Student { string name; int year, month, day, idx; }; int main() { // 方式1先定义对象再逐个赋值 Student stu1; stu1.name Luowen; stu1.year 1991; stu1.month 8; stu1.day 1; stu1.idx 0; // 方式2定义时直接初始化C11 及以上支持 Student stu2 {Yangchu, 1992, 4, 23, 1}; // 方式3用 new 创建动态对象堆内存需手动释放 Student* stu3 new Student{Qiujingya, 1993, 10, 13, 2}; // 访问成员变量普通对象用 . 指针对象用 - cout stu1.name endl; // 输出Luowen cout stu3-name endl; // 输出Qiujingya delete stu3; // 释放动态对象内存避免泄漏 return 0; }2.结构体数组// 1. 定义结构体类型 同时创建结构体数组 struct student // 定义名为 student 的结构体类型注意C中结构体名小写/大写都可以建议统一风格 { string name; // 学生姓名string 类型需包含 string 头文件 int y; // 出生年份 int m; // 出生月份 int d; // 出生日期 int id; // 输入顺序/编号对应之前的 idx }a[N]; // 关键定义结构体的同时创建一个名为 a、长度为 N 的结构体数组二、结构体 vs 类classC 中struct和class几乎是等价的唯一核心区别struct的成员默认公有public无需写public:class的成员默认私有private需要显式写public:才能外部访问。struct S { int a; // 默认 public外部可直接访问 }; class C { int a; // 默认 private外部不可直接访问 public: int b; // 显式 public外部可访问 };C 结构体struct是封装多个不同类型数据的自定义类型结尾必须加分号访问结构体成员普通对象用.指针对象用-对结构体数组排序时需通过「自定义比较函数」或「重载 运算符」定义排序规则核心是按「年→月→日升序同生日按输入顺序降序」结构体默认成员公有适合简单数据聚合场景如学生信息是 C 处理结构化数据的基础。题目P1104 生日结构体内部的变量为成全变量不是全局变量存的是随机值结构体排序不能直接使用sortsort(a, an, cmp);bool cmp(student b, student c){// if(b.y c.y ) return bc;// if(b.y ! c.y) return b.y c.y;//sort排序是从小到大排序的 如果返回的是true b cif(b.y ! c.y) return b.y c.y;if(b.m ! c.m) return b.m c.m;if(b.d ! c.d) return b.d c.d;return b.idx c.idx;}#include bits/stdc.h using namespace std; const int N 110 ; struct student{ string name; int y, m, d; int idx;//结构体内部的变量为成全变量不是全局变量存的是随机值 }a[N]; bool cmp(student b, student c){ // if(b.y c.y ) return bc; // if(b.y ! c.y) return b.y c.y; //sort排序是从小到大排序的 如果返回的是true b c if(b.y ! c.y) return b.y c.y; if(b.m ! c.m) return b.m c.m; if(b.d ! c.d) return b.d c.d; return b.idx c.idx; } int main(){ int n; cin n; //结构体为数组时调用时一定要用a[i] // while(n--){ // cin a.name a.y a.m a.d; // } for(int i0; in; i){ cin a[i].name a[i].y a[i].m a[i].d ; a[i].idx i; } //结构体排序不能直接使用sort sort(a, an, cmp); for(int i0; in; i) cout a[i].name endl; return 0; }
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2409573.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!