C++中的结构体和C语⾔结构体的有⼀个⽐较⼤的差异就是:C++中的结构体中除了有成员变量之外,还可以包含成员函数。
1. C++的结构体会有⼀些默认的成员函数,⽐如:构造函数、析构函数等,是编译器默认⽣成的,如果觉得不合适,也是可以⾃⼰显⽰的定义这些函数,这些函数都是⾃动被调⽤,不需要⼿动调⽤。
2. 除了默认的成员函数之外,我们可以⾃⼰定义⼀些成员函数,这些成员函数可以有,也可以没有,完全根据的实际的需要来添加就可以。
3. 这些成员函数可以直接访问成员变量
4. 成员函数的调⽤也使⽤ . 操作符。
//代码1-演⽰⾃定义成员函数
#include <iostream>
using namespace std;
struct Stu
{
//成员变量
string name;
int chinese;
int math;
int total;
void init_stu() //初始化
{
name = "⼩明";
chinese = 99;
math = 95;
total = math + chinese;
}
void print_stu() //打印
{
cout << "名字:" << name << endl;
cout << "语⽂:" << chinese << endl;
cout << "数学:" << math << endl;
cout << "总分:" << total << endl;
}
};
int main()
{
struct Stu s;
s.init_stu();
s.print_stu();
return 0;
}
构造函数:
构造函数是结构中默认的成员函数之⼀,构造函数的主要的任务是初始化结构体变量。写了构造函
数,就不需要再写其他成员函数来初始化结构体(类)的成员,⽽且构造函数是在结构变量创建的时候,编译器⾃动被调⽤的。
构造函数的特征如下:
• 函数名与结构体(类)名相同。
• ⽆返回值。
• 构造函数可以重载。
• 若未显式定义构造函数,系统会⾃动⽣成默认的构造函数。
析构函数:
析构函数是⽤来完成结构体变量中资源的清理⼯作,也是结构体中默认的成员函数之⼀。析构函数在结构体变量销毁的时候,被⾃动调⽤的。
析构函数的特征如下:
• 析构函数名是在结构体(类)名前加上字符 ~ 。
• ⽆参数⽆返回值类型。
• ⼀个类只能有⼀个析构函数。若未显式定义析构函数,系统会⾃动⽣成默认的析构函数。注意:析构函数不能重载。
//代码2-演⽰构造和析构函数
#include <iostream>
using namespace std;
struct Stu
{
//成员变量
string name;
int chinese;
int math;
int total;
//构造函数
Stu()
{
cout << "调⽤构造函数" << endl;
name = "⼩明";
chinese = 99;
math = 95;
total = math + chinese;
}
//析构函数
~Stu()
{
cout << "调⽤析构函数" << endl;
//对于当前这个类的对象没有啥资源清理
}
void print_stu() //打印
{
cout << "名字:" << name << endl;
cout << "语⽂:" << chinese << endl;
cout << "数学:" << math << endl;
cout << "总分:" << total << endl;
}
};
int main()
{
struct Stu s;
s.print_stu();
return 0;
}