在主函数中和在成员函数中进行初始化的区别

本文介绍了一个简单的C++程序,演示了如何定义一个名为point的类,该类包含私有成员变量用于存储小时、分钟和秒,并实现了设置时间和显示时间的成员函数。通过主函数展示了如何创建对象并调用这些成员函数。
#include <iostream>
using namespace std;
class point
{
private:
    int h,m,s;
public:
    void set_time(int a1,int a2,int a3);
    void show_time();//成员函数
};
void point::set_time(int a1,int a2,int a3)
{
   h=a1;
   m=a2;
   s=a3;
   // cin>>h>>m>>s;//直接输入到内存里面去,是类的数据成员,无需重新定义,这是在成员函数里面输入时分秒,不是在主函数中
   //而最常用的就是在函数中进行初始化输入
}


 void point::show_time()
 {
     cout<<h<<":"<<m<<":"<<s<<endl;
 }
int main()
{
    int a1,a2,a3;
    cin>>a1>>a2>>a3;//这是在主函数中输入数据成员用来初始化time函数
    point t;
    t.set_time(a1,a2,a3);//使用对象调用函数
    t.show_time();
    return 0;
}
主函数初始化和子函数初始化在内存管理方面存在多方面的区别: ### 内存分配的位置 - **主函数初始化**:在主函数中进行内存分配,意味着内存分配的操作发生在程序的起始执行部分。主函数通常是程序的入口点,在这个阶段进行内存分配可以让开发者对整个程序的内存使用有一个宏观的把控。例如: ```c #include <stdio.h> #include <stdlib.h> int main() { int *arr = (int *)malloc(10 * sizeof(int)); if (arr == NULL) { printf("内存分配失败\n"); return 1; } // 使用 arr 进行操作 free(arr); return 0; } ``` 在这个例子中,内存分配是在主函数中完成的,开发者可以在主函数中直接管理这块内存的生命周期。 - **子函数初始化**:内存分配发生在子函数内部。子函数通常是为了完成特定的任务而设计的,在子函数中进行内存分配可以将内存分配的逻辑封装在子函数内部,提高代码的模块化程度。例如: ```c #include <stdio.h> #include <stdlib.h> void allocate_memory(int **arr) { *arr = (int *)malloc(10 * sizeof(int)); if (*arr == NULL) { printf("内存分配失败\n"); } } int main() { int *arr = NULL; allocate_memory(&arr); if (arr != NULL) { // 使用 arr 进行操作 free(arr); } return 0; } ``` 在这个例子中,内存分配的逻辑被封装在 `allocate_memory` 子函数中。 ### 内存释放的责任 - **主函数初始化**:主函数负责分配和释放内存,这样可以确保内存的生命周期在主函数的控制范围内。开发者可以在主函数中清晰地看到内存的分配和释放操作,降低内存泄漏的风险。例如上面第一个例子,`malloc` 和 `free` 操作都在主函数中完成。 - **子函数初始化**:子函数负责分配内存,而主函数或其他调用者负责释放内存。这就要求调用者必须清楚子函数分配了内存,并且在合适的时机进行释放。如果调用者忘记释放内存,就会导致内存泄漏。例如上面第二个例子,`allocate_memory` 子函数分配了内存,而 `main` 函数负责释放内存。 ### 错误处理的方式 - **主函数初始化**:主函数可以直接处理内存分配失败的情况。由于内存分配是在主函数中进行的,主函数可以根据分配结果做出相应的处理,例如输出错误信息并终止程序。例如上面第一个例子中,当 `malloc` 失败时,主函数直接输出错误信息并返回非零值表示程序异常终止。 - **子函数初始化**:子函数需要将内存分配失败的信息传递给调用者。子函数可以通过返回值或者指针参数来告知调用者内存分配是否成功。调用者需要根据子函数的反馈进行相应的处理。例如上面第二个例子中,`allocate_memory` 子函数可以通过检查指针是否为 `NULL` 来判断内存分配是否成功,并在必要时输出错误信息。 ### 内存管理的灵活性 - **主函数初始化**:主函数可以根据程序的整体逻辑和需求来决定是否进行内存分配。主函数可以在程序开始时一次性分配所需的所有内存,也可以根据用户输入或其他条件动态地分配内存。这种方式可以让开发者对内存使用有更精细的控制。 - **子函数初始化**:子函数可以根据自身的功能需求来决定是否进行内存分配。子函数可以在每次被调用时分配内存,也可以根据特定的条件进行内存分配。这种方式可以提高代码的灵活性和可复用性,因为子函数可以独立于主函数进行内存管理。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值