【C++】C++还能这么用--结构体构造函数、成员函数、创建链表

写在前面:大家好K。首先为你点进这篇有趣的文章点赞👍!文章在撰写过程中难免有疏漏和错误,欢迎你在下方留言指出文章的不足之处;如果觉得这篇文章对你有用,也欢迎你点赞和留下你的评论。更多内容请点进👉我的博客K。👈阅览。

1. 成员函数

示例,利用成员函数初始化成员数据:

struct Students {
	// 这是普通成员数据
	string name;
	int age;
	// 下面定义成员函数,修改成员数据值
	void set(string name, int year) {
		// 形参与成员数据同名时,用this->访问成员数据
		this->name = name;
    	age = year;
  	}
};

// 某函数中
Students stu;
stu.set("jkz", 18); // 调用成员函数
cout << stu.name << ' ' << endl; // 输出:jkz

利用成员函数初始化数据成员,若形参名与成员数据名相同时,用this关键字,this是指向本身的指针,所以访问成员数据用->

2. 构造函数

结构::{}

示例

struct Students {
	string name;
	int age;
};

在没有手动初始化值时,两个成员变量默认值为null和0。如果想自定义初始化的值,该如何做呢?

2.1 如何定义

struct Students {
	string name;
	int age;
	int grade;
	Students(string name, int score) : age(18), grade(score) {
		this->name = name; // 注意用"->"访问成员变量
	}
	// 构造函数可以重载(形参列表不同)
	Students(): name("jkz"), age(18), grade(100) {} // {}不能丢掉
};

类似于成员函数,但是在初始化成员方面,构造函数显然更方便。

注意:

1. 构造函数冒号的左边和构造函数相同,名字与结构体名相同,还有一个形参列表

2. 如果形参名与成员变量名不同,则可以用成员变量名(形参名)(示例grade变量),多个成员用逗号分割。如果形参名与成员变量名相同,则用{this->成员变量名=形参名;}(示例name变量)来初始化,注意用“->”访问成员变量

3. 可以直接用变量名(值)(示例name变量)直接给变量赋值

4. {}一定要有,即使没有用到this来初始化变量,也要加上{}

5. 形参列表可以为空,然后用第3点的方法初始化变量

6. 若无构造函数,系统会赠送初始值

7. this是指向本身的指针,所以访问成员变量用->

8. 构造函数可以重载

2.2 如何使用

// 在某函数中
// 若构造函数形参列表可以为空
// 用Students stu;
Students stu("jkz", 100);
cout << stu.name << ' ';
cout << stu.age << ' ';
cout << stu.grade << endl;
// 输出
// jkz 18 100

定义时,结构体变量名后跟是参列表

像正常访问结构体成员一样访问

注意:若初始化形参列表为空,那么在定义结构体变量时,不加(),只需要结构体名 变量名

可以使用new运算符在堆区创建对象(点击学习内存4区

2.3 还有一种写法

结构:结构体名(){函数体}

这种写法,形参列表必须为空,不推荐用

2.4 示例:创建链表节点

创建链表节点必须用new运算符来避免内存错误,点击学习悬垂指针

// 定义结构体
struct ListNode {
	int val;
	ListNode *next;
	ListNode(int x) : val(x), next(NULL) {}
};

// 在别的地方使用
// 创建节点
// 必须使用new运算符使用堆区空间,以免产生内存错误
ListNode* h = new ListNode(值域的值)

// 修改值域,连接新节点
h->next = new ListNode(值域的值)

// 往后移动节点
h = h->next

// 其他操作……

3. 与类的区别

C++中的类和java中的类具有较大差别

  1. 结构体关键字struct,类关键字class
  2. 结构体声明通常不包括 public 或 private 的访问修饰符。
  3. C++中类的成员变量,默认是私有的;结构体中的数据成员是公共的,可以被直接访问
  4. 尽管结构体可以包含成员函数,但很少这样做。所以,通常情况下结构体声明只会声明成员变量。(为了读懂别人的代码和老代码,也要学习结构体成员函数)
  • 226
    点赞
  • 169
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 172
    评论
C++结构构造函数是一种特殊的成员函数,用于在创建结构对象时进行初始化操作。结构构造函数可以自定义,也可以使用默认构造函数。使用默认构造函数的好处是可以不经初始化就定义结构变量,但是默认构造函数一般不可见,需要显式地定义出来。同时使用默认构造函数和自定义构造函数可以既能够不初始化就可以定义结构变量,也可以单独对某些结构变量进行赋值,这是最佳的选择。\[1\]\[2\]\[3\]例如,可以使用默认构造函数和自定义构造函数来初始化结构变量,如下所示: ```cpp #include <stdio.h> struct student { int id; char gender; student(){} // 默认构造函数一般不可见,需要显式定义 student(int _id, char _gender) : id(_id), gender(_gender){} // 自定义构造函数 }; int main() { student pig; // 不经初始化就定义结构变量 pig = student(23, 'F'); // 使用自定义构造函数进行赋值 printf("pig ID = %d\npig Gender = %c", pig.id, pig.gender); return 0; } ``` 通过同时使用默认构造函数和自定义构造函数,可以实现不经初始化就可以定义结构变量,并且可以单独对某些结构变量进行赋值。\[3\] #### 引用[.reference_title] - *1* *2* *3* [【C++ 结构构造函数使用】](https://blog.csdn.net/weixin_42483745/article/details/126864820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 172
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AK°

佛系接受打赏????

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值