C++结构体详解(一)

最近有网友私信我,让我出一期关于结构体的博文,对结构体的基本结构进行讲解,但是由于结构体本身跟指针、跟数组都能搭上关系,所以博主准备出三期结构体的博文,对结构体的讲解进行分别的讲解。
话不多说,我们开始对结构体进行学习吧。前提:在学任何的新的知识的时候,首先对概念进行理解,只有对概念有正确和充分的理解,才能够正确的去使用对应的工具(关键字)

一、结构体的定义

结构体实际就是一种结构,其中成员列表由若干个成员组成,每个成员都是该结构的一个组成部分。
结构体的定义格式: struct 结构体名{属性名;};

理解:我们可以理解为一种模板,但同时,我们又可以把它看作是一种自定义的类型,正如同int型,short型,char型,这样的关键字来使用。后期我们所学习到的(类)class实际上在结构上跟(结构体)struct就非常类似。

struct是关键字,而struct后的结构名就是人为设定的,并且该结构体名字我们可以看做是一种模板,一种有属性的模板。

比如:我们想创建一种动物的模板,这个动物的属性有:名字,体重,年龄
因此:我们对这种想法的分析应该是:①创建动物这个模板,②给这个模板添加属性。
代码这么实现:

//创建动物结构体
struct Animal	
{
//属性名
	char name[10];		//名字
	int weight;			//体重
	int age;			//年龄
};

显然,我们这么创建的动物结构体,符合结构体的定义格式:struct 结构体名{属性名;};

二、结构体的变量

结构体的变量是什么?我们前面提到了,创建一种结构,我们是用struct来创建,格式是:struct 结构体名{属性名;};
但当我们创建完这个结构体后,我们就可以将结构体,也就是模板,也就是我们上面的Animal,我们就可以将Animal理解为是一种类似于int,short,char类型的关键字来使用。我们可以用Animal来定义变量,用Animal定义的变量同样也有内存。
但是,这里我们需要讲的是,Animal是一个模板,这个模板有自己的属性,用这样一个有属性的模板去创建的对象,那么所创建的对象也就具有相同的属性。

首先,我们来了解一下,结构体创建对象的几种方式:
二(一)在创建结构体的时候创建对象

格式:
struct 结构体名
{属性名;}变量名1,变量名2;

//创建动物结构体的同时创建结构体变量
struct Animal	
{
//属性名
	char name[10];		//名字
	int weight;			//体重
	int age;			//年龄
}Cat,Dog;//用Animal这个结构体创建了Cat,Dog这两个结构变量,这两个变量都拥有名字,体重,年龄这几个属性。
二(二)在创建完结构体后再创建对象

格式:结构名 结构变量名;

#include<iostream>
using namespace std;

//第一步,创建动物结构体
struct Animal	
{
//属性名
	char name[10];		//名字
	int weight;			//体重
	int age;			//年龄
};

int main()
{
//第二步,创建完结构体后再用结构名去创建变量
	Animal Cat;	//用Animal这个结构体创建了Cat变量,Cat拥有Animal的所有属性
	Animal Dog;	//用Animal这个结构体创建了Dog变量,Dog拥有Animal的所有属性

	return 0;
}
二(三)了解完如何定义结构变量后,我们一起来看看如何利用变量去调用变量所拥有的属性。

格式:变量名.属性名
通过这个格式,我们可以对变量的属性进行相应的初始化
在这里插入图片描述

二(四)提到初始化,结构体变量初始化有两种方式:①直接初始化(在定义结构变量的时候进行初始化,初始化成员的顺序为结构体属性声明的顺序)②间接初始化。

直接初始化就如同下面一样:
结构体本身的属性声明顺序为: name[10];weight;age
在这里插入图片描述
那么,直接初始化时,赋值的顺序也就是名字,体重,年龄进行赋值,并输出验证,是否成功对变量的属性进行了初始化
代码如:

#include<iostream>
using namespace std;

//创建动物结构体
struct Animal	
{
//属性名
	char name[10];		//名字
	int weight;			//体重
	int age;			//年龄
};

int main()
{
	Animal Cat = {"猫",10,1};	//在创建结构变量的时候进行初始化,初始化顺序为结构体属性的声明顺序
	Animal Dog = {"狗",20,2};	//直接初始化,分别为名字,体重,年龄
	cout <<"动物名字为:"<< Cat.name << endl;
	cout << "动物体重为:" << Cat.weight << endl;
	cout << "动物年龄为:" << Cat.age << endl;

	cout << "动物名字为:" << Dog.name << endl;
	cout << "动物体重为:" << Dog.weight << endl;
	cout << "动物年龄为:" << Dog.age << endl;
	return 0;
}

运行结果:
在这里插入图片描述
间接初始化就不是在定义的变量的时候进行初始化,而是通过结构变量来调用属性,从而对属性进行赋值。

#include<iostream>
using namespace std;

//创建动物结构体
struct Animal	
{
//属性名
	char name[10];		//名字
	int weight;			//体重
	int age;			//年龄
};

int main()
{
	Animal Cat = {"猫"};	//当然,我们可以只对变量的属性部分初始化,赋值的顺序仍然是结构属性声明的顺序。所以猫赋值给了字符数组name[10]
	Animal Dog = {"狗"};	//同理



	//对结构变量的属性进行调用,并且对属性进行初始化---间接初始化
	Cat.age = 2;
	cout <<Cat.name<< "的年龄为:" << Cat.age << "岁" << endl;
	Dog.weight = 30;
	cout <<Dog.name<< "的体重为:" << Dog.weight << "千克" << endl;
	return 0;
}

运行结果:
在这里插入图片描述

三、结构体成员

通过一二节,我们学会了如何去创建结构体,如果利用结构体去创建变量,以及如何使用变量去调用自己的相关属性。这里我们引入结构成员这样一个概念。
结构体成员:结构体成员就包含了成员属性和成员函数(也称为成员方法或结构体方法)
成员属性:成员属性就是我们上面所说的,结构体自己的属性,结构体定义变量后,变量也拥有这结构体的属性。从而能够对属性进行赋值,输出等操作。
成员函数:成员函数实际上就是结构体的功能,这个模板能够执行怎么样的功能,或者说这个模板创建的对象能够做什么,执行什么功能。这就是成员函数。

还是像上面一样,我们就Animal来举例,我们熟知,大部分的动物都会吃东西,都会跳,那么吃东西就可以作为结构体的功能,所以我们就可以认为的去给对应的结构体写这样一个函数。从而结构体所创建的变量也能够拥有结构体自带的功能,从而结构体变量就能够去调用对应的成员函数。

== 格式:结构体变量.函数名(形参表)==
例如:在这里插入图片描述
代码如下:

#include<iostream>
using namespace std;

//创建动物结构体
struct Animal	
{
//成员属性:
	char name[10];		//名字
	int weight;			//体重
	int age;			//年龄
//成员方法:
	void Eat()
	{
		cout<<name << "吃东西了" << endl;
	}
	void Jump()
	{
		cout <<name<< "跳跃了" << endl;
	}


};

int main()
{
	Animal Cat = {"猫"};	//当然,我们可以只对变量的属性部分初始化,赋值的顺序仍然是结构属性声明的顺序。所以猫赋值给了字符数组name[10]
	Animal Dog = {"狗"};	//同理



	//对结构变量的属性进行调用,并且对属性进行初始化---间接初始化
	Cat.age = 2;
	cout <<Cat.name<< "的年龄为:" << Cat.age << "岁" << endl;
	Dog.weight = 30;
	cout <<Dog.name<< "的体重为:" << Dog.weight << "千克" << endl;

	//对结构体变量的函数进行调用,简称为:结构体变量执行了某功能。(或者调用了某函数)
	Cat.Eat();		//猫调用了吃东西函数(或者猫调用了吃东西方法)
	Cat.Jump();		//猫调用了跳跃函数(或者猫调用了跳跃方法)

	Dog.Eat();		//狗调用了吃东西函数(或者狗调用了吃东西方法)
	Dog.Jump();		//狗调用了跳跃函数(或者狗用了跳跃方法)

	return 0;
}

运行结果:
在这里插入图片描述
关于C++的学习,欢迎大家关注我,对我的文章进行评论,点赞,收藏,关注我不迷路。也欢迎广大网友跟我探讨C++的干货。C++的知识,远远不止这么点,我们一 一进行分析讲解。网友有什么想让我来进行讲解的,可以评论留言,我也会尽我所能给大家去做好讲解。
公众号:平平无奇代码猴
也可以搜索:Jackiie_wang 公众号,欢迎大家关注!欢迎催更!留言!

.作者:ProMer_Wang

链接:https://blog.csdn.net/qq_43801020/article/details/107182468

本文为ProMer_Wang的原创文章,著作权归作者所有,转载请注明原文出处,欢迎转载!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值