信管14:构造函数和析构函数执行分析示列
来源:互联网 发布:360浏览器mac版下载 编辑:程序博客网 时间:2024/06/06 19:57
构造函数和析构函数,具有一般函数没有的特点,在对象定义时,构造函数会自动执行,析构函数在对象生命周期结束时会自动收回资源。细读下面程序,分析程序执行结果。
#include <iostream>#include <cstring>using namespace std;class Student{public:Student(char* pName= "yale", int sId = 0){strncpy(name,pName,40);name[39] = '\0';id = sId;cout <<"Constructing a student "<<pName <<endl;}Student(Student& s) // 拷贝构造函数{ cout <<"Constructing copy of " <<s.name <<endl;strcpy(name,"copy of ");strcat(name,s.name);id = s.id;}~Student() //析构函数{ cout <<"Destructing " <<name <<endl; }private:char name[40];int id;};void fn(Student s){cout<<"In function fn()"<<endl;// fn函数调用结束时,析构对象s}int main(){Student randy("Randy",1234);// 调用构造函数,创建对象randyStudent wang("wang",5678);// 调用构造函数,创建对象wangcout<<"--------------------"<<endl;cout<<" Calling fn()\n";fn(randy);// 调用fn函数,参数传递时调用拷贝构造函数cout <<"Returned from fn()"<<endl<<"--------------------"<<endl; system("pause");return 0;}
问题:1.分析程序执行过程,分析对象构造函数和析构函数的执行时机。
2.为什么没有看到主程序定义的对象 :randy 和wang的析构函数特执行?
3.如果程序改成下面的结果,分析程序执行结果:
#include <iostream>#include <cstring>using namespace std;class Student{public:Student(char* pName= "yale", int sId = 0){strncpy(name,pName,40);name[39] = '\0';id = sId;cout <<"Constructing a student "<<pName <<endl;}Student(Student& s) // 拷贝构造函数{ cout <<"Constructing copy of " <<s.name <<endl;strcpy(name,"copy of ");strcat(name,s.name);id = s.id;}~Student() //析构函数{ cout <<"Destructing " <<name <<endl; }private:char name[40];int id;};void fn(Student s){cout<<"In function fn()"<<endl;// fn函数调用结束时,析构对象s}void sub(){ Student randy("Randy",1234);// 调用构造函数,创建对象randyStudent wang("wang",5678);// 调用构造函数,创建对象wangcout<<"--------------------"<<endl;cout<<" Calling fn()\n";fn(randy);// 调用fn函数,参数传递时调用拷贝构造函数cout <<"Returned from fn()"<<endl<<"--------------------"<<endl;}int main(){ sub();system("pause");return 0;}
0 0
- 信管14:构造函数和析构函数执行分析示列
- 信管14:构造函数析构函数执行顺序示例
- 构造函数和析构函数的执行顺序
- 构造函数和析构函数的执行顺序相反
- c++中构造函数和析构函数执行过程
- 关于构造函数和析构函数的执行顺序
- C/C++——构造函数、复制构造函数和析构函数的执行时刻
- 信管14:函数重载示例
- 信管14:静态成员函数示例
- 信管14:友元函数示例
- 信管14:函数模板引例
- C++派生类的构造函数和析构函数执行顺序及其构造形式
- 在QT环境下,实例分析构造函数与析构函数的执行时机
- 何时执行构造函数和析造函数
- 基类和派生类的构造函数和析构函数执行顺序
- c++父类和子类构造函数和析构函数执行顺序
- 构造函数,拷贝构造函数和析构函数
- 构造函数、拷贝构造函数和析构函数
- 关于c# 大端序 java 小端序的理解
- 黑马程序员---Java基础---IO流(三)
- 字符的大写转小写【24K纯水】
- 集合框架(泛型)
- MAC OS X
- 信管14:构造函数和析构函数执行分析示列
- 无参数 ,参数为null,报错,处理办法
- 黑马程序员——高新技术4——泛型
- 选择排序
- 关于getClass().getClassLoader()
- service常见用法及相关知识
- Object-C中的NSString
- Objective-C——内存管理
- 继承、抽象类和接口