C++ 结构体的成员函数

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;
}

### C++ 结构体成员函数的定义与使用 在C++中,结构体不仅可以包含数据成员,还可以包含成员函数。这使得结构体的行为类似于类,区别在于默认访问控制不同——结构体中的成员默认为`public`,而类中的成员默认为`private`。 #### 定义带成员函数结构体 下面是一个简单的例子来展示如何在一个结构体中定义成员函数: ```cpp struct Point { int x; int y; // 构造函数初始化成员变量 Point(int initX = 0, int initY = 0) : x(initX), y(initY) {} // 成员函数用于打印坐标点的位置 void displayPosition() const { std::cout << "Point at (" << x << ", " << y << ")" << std::endl; } // 修改坐标的成员函数 void moveBy(int dx, int dy) { x += dx; y += dy; } }; ``` 上述代码展示了两个基本操作:通过构造函数设置初始值以及提供方法修改这些值[^1]。 #### 使用带有成员函数结构体实例 创建并调用该结构体的方法如下所示: ```cpp int main() { // 创建一个Point对象,并指定其位置 Point p(3, 4); // 调用displayPosition显示当前位置 p.displayPosition(); // 移动这个点到新的位置 p.moveBy(-1, 2); // 显示移动后的结果 p.displayPosition(); } ``` 这段程序会先输出`(3, 4)`表示原始位置,再输出`(2, 6)`作为更新后的位置。 对于继承关系下的虚函数和最终覆盖(`final`)特性,在某些情况下可以防止子类重写父类已实现的功能。然而需要注意的是,只有当基类声明了一个虚拟成员函数时,派生类才能标记它为`final`;如果尝试将非虚拟成员设为`final`则会导致编译错误[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值