IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++中结构体、数据成员与静态数据成员 -> 正文阅读

[C++知识库]C++中结构体、数据成员与静态数据成员

结构体

结构体:对基本数据结构进行扩展,将多个对象放置在一起视为一个整体

  • 结构体的声明与定义(注意定义后面要跟分号来表示结束)
  • 仅有声明的结构体是不完全类型( incomplete type )
  • 结构体(以及类)的一处定义原则:翻译单元级别
数据成员与静态数据成员
数据成员静态数据成员
含义每个对象都有自己的数据成员多个对象之间共享的数据成员(共享内存)
声明数据成员声明时可以引入 const 、引用等限定同数据成员
定义与初始化● 数据成员会在构造类对象时定义
●( C++11 )类内成员初始化
● 聚合初始化:从初始化列表到指派初始化器
● C++98 :类外定义, const 静态成员的类内初始化
● C++17 :内联静态成员的初始化
decltype与auto( C++11 )数据成员可以使用 decltype 来声明其类型,但不能使用 auto以使用 decltype 来声明其类型, 也可以使用auto
成员访问● “.” 与“ ->” 操作符● “.” 与“ ->” 操作符
● “::” 操作符
例1:构建点数据类
#include <iostream>

struct Point {
	int x;
	int y;
	int z;
};

struct Point1 {
	const int x=20;
	decltype(x) y=22; // 使用 decltype 来声明其类型
	int z=4;
};

int main()
{
	Point p1{ 1,2,3 };// 聚合初始化
	Point p2{ .x=1,.z=3 };// 指派初始化
	Point* p3;// 类指针
	p3 = &p2;
	Point1 p;
	Point1* p4 = &p;// 保存p对象的地址

	// 成员访问
	std::cout << "x: " << p1.x << " y: " << p1.y << " z: " << p1.z << std::endl;
	std::cout << "x: " << p2.x << " y: " << p2.y << " z: " << p2.z << std::endl;
	std::cout << "x: " << p3->x << " y: " << p3->y << " z: " << p3->z << std::endl;
	std::cout << "x: " << p4->x << " y: " << p4->y << " z: " << p4->z << std::endl;
}

结果:

x: 1 y: 2 z: 3
x: 1 y: 0 z: 3
x: 1 y: 0 z: 3
x: 20 y: 22 z: 4
例2:类外定义静态成员数据
#include <iostream>

struct Point {
	static int x;
	int y = 0;
};
int Point::x; //类外定义静态成员数据

int main()
{
	Point p1;
	Point p2;

	p2.x = 10;
	p2.y = 20;
	// 成员访问
	std::cout << "x: " << p1.x << " y: " << p1.y << std::endl;
	std::cout << "x: " << p2.x << " y: " << p2.y << std::endl;
	std::cout << Point::x << std::endl;
}

结果:

x: 10 y: 0
x: 10 y: 20
10
例3: const 静态成员的类内初始化
#include <iostream>

struct Point {
	static const int x = 0;
	int y = 1;
};

int main()
{
	Point p1;
	Point *p2;
	p2 = &p1;
	// 成员访问
	std::cout << "x: " << p1.x << " y: " << p1.y << std::endl;
	std::cout << "x: " << p2->x << " y: " << p2->y << std::endl;
	std::cout << "x: " << Point::x << std::endl;

}

结果:

x: 0 y: 1
x: 0 y: 1
x: 0
例4:内联静态成员的初始化
#include <iostream>

struct Point {
	inline static int x = 0;// 内联静态成员的初始化
	inline static auto y = 1.0;// 使用 auto推断其类型
	inline static decltype(y) z = 2;// 使用 decltype 来声明其类型
};

int main()
{
	Point p1;
	p1.x = 10;
	p1.y = 20.156;
	p1.z = 30.23;
	// 成员访问
	std::cout << "x: " << p1.x << " y: " << p1.y << " z: " << p1.z << std::endl;
	std::cout << "y: " << Point::y << std::endl;

}

结果:

x: 10 y: 20.156 z: 30.23
y: 20.156

参考资料:

《C++ Primer 中文版》(第 5 版)
《C++基础与深度解析》深蓝学院课程

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:51:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:58:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码