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

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. 尽管结构体可以包含成员函数,但很少这样做。所以,通常情况下结构体声明只会声明成员变量。(为了读懂别人的代码和老代码,也要学习结构体成员函数)
发布了13 篇原创文章 · 获赞 71 · 访问量 722

猜你喜欢

转载自blog.csdn.net/qq_33973359/article/details/105511966