关于析构函数和构造函数何时调用的小例子

详情见C++ PrimerPlus第十章

省略其他函数,将构造函数和析构函数写出来

Stock::Stock() //default constructor{    std::cout<<"Default constructor called\n";    company="no name";    shares=0;    share_val=0;    total_val=0;}

Stock::Stock(const std::string&co,long n,double pr){    std::cout<<"Constructor using"<<co<<"called\n";    company=co;    if(n<0)    {        std::cout<<"Number of shares can‘t be negative;"<<company<<"shares set to 0.\n";

}    else    {        shares=n;    }    share_val=pr;    set_tot();}

Stock::~Stock(){    std::cout<<"Bye,"<<company<<"!\n";}

正常情况下析构函数和构造函数一般没有cout语句,这里为了显示出他何时被调用,加上了输出语句。
int main(){    {        using std::cout;        cout<<"Using constructors to creat new objects\n";        Stock stock1("NankSmart",12,20);        stock1.show();        Stock stock2("Boffo Objects",2,2);//调用时        // 直接调用了构造函数 即下列函数

/*Stock::Stock(const std::string&co,long n,double pr){    std::cout<<"Constructor using"<<co<<"called\n";    company=co;    if(n<0)    {        std::cout<<"Number of shares can‘t be negative;"<<company<<"shares set to 0.\n";

}    else    {        shares=n;    }    share_val=pr;    set_tot();}  因此编译后有如下语句:  Constructor usingBoffo Objectscalled  Company: Boffo Objects shares: 2  Share price: 2.000 total worth :4.00         * */

     stock2.show();

cout<<"Assigning stock1 to stock2 :\n";        stock2=stock1;        cout<<"Listening stock1 and stock2: \n";        stock1.show();        stock2.show();

cout<<"Using a constructor to reset an object\n";        stock1=Stock("Nifty Foods",10,50);        //这里调用了析构函数,有如下语句 "Bye,Nifty Foods!"        cout<<"Revised stock1:\n";        stock1.show();        cout<<"Done\n";        //最后结束的时候,全部对象结束调用,所以有调用了两个对象的析构函数        //有如下语句        //Bye,NankSmart!        //Bye,Nifty Foods!    }}最后是编译后的结果(有些遍以前可能不同)

Using constructors to creat new objects
Constructor usingNankSmartcalled
Company: NankSmart shares: 12
Share price: 20.000 total worth :240.00
Constructor usingBoffo Objectscalled
Company: Boffo Objects shares: 2
Share price: 2.000 total worth :4.00
Assigning stock1 to stock2 :
Listening stock1 and stock2:
Company: NankSmart shares: 12
Share price: 20.000 total worth :240.00
Company: NankSmart shares: 12
Share price: 20.000 total worth :240.00
Using a constructor to reset an object
Constructor usingNifty Foodscalled
Bye,Nifty Foods!
Revised stock1:
Company: Nifty Foods shares: 10
Share price: 50.000 total worth :500.00
Done
Bye,NankSmart!
Bye,Nifty Foods!

Process finished with exit code 0

时间: 2024-11-15 20:08:21

关于析构函数和构造函数何时调用的小例子的相关文章

C#调用dll 小例子

无论调用win32.dll还是mfc.dll基本过程都是一样的 下面以CALLmfcdll的C#项目调用VC++编写的MFCDLL项目为例 1.在MFCDLL.h中加上 extern "C" __declspec(dllexport) int add(int x,int y);//导出函数 2.在MFCDLL.cpp中加上 extern "C" __declspec(dllexport) int add(int x,int y){ //focus=100; retu

有关this,4种调用模式小例子

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>testFun1_this</title> 6 </head> 7 <body> 8 9 </body> 10 </html> 11 <script type="text/j

C++继承中析构函数 构造函数的调用顺序以及虚析构函数

首先说说构造函数.大家都知道构造函数里就能够调用成员变量,而继承中子类是把基类的成员变成自己的成员,那么也就是说子类在构造函数里就能够调用基类的成员了,这就说明创建子类的时候必须先调用基类的构造函数,仅仅有这样子类才干在构造函数里使用基类的成员,所以是创建子类时先调用基类的构造函数然后再调用自己的构造函数.通俗点说,你要用某些物品.但这些物品你没办法自己生产,自然就要等别人生产出来,你才干拿来用. 接着就是析构函数了,上面说到子类是将基类的成员变成自己的成员,那么基类就会仅仅存在子类中直到子类调

c++中六种构造函数的实现以及9中情况下,构造函数的调用过程

六种构造函数的实现代码如下: #include<iostream> using namespace std; //c++中六种默认的构造函数 class Test { public: Test(int d = 0):m_data(d)//1构造函数(带默认值0),以参数列表的形式初始化 { cout<<"Creat Test Obj :"<<this<<endl; } ~Test()//2析构函数 { cout<<"

【C/C++学院】(6)构造函数/析构函数/拷贝构造函数/深copy浅copy

1.构造函数 类的初始化即为构造函数.也为:隐式的初始化. 构造函数在对象初始化的时候,自动被调用.隐式的调用. 构造函数分为三种:有参构造函数.无参构造函数.拷贝构造函数. 有参构造函数调用有三种:括号法.等号法.手工法. #include <iostream> using namespace std; class Test { private: int m_a; public: Test()//无参构造函数 { } Test(const Test &obj)//拷贝构造函数 { }

php 析构函数,构造函数

php 析构函数,构造函数 <?php /** * 测试使用的PHP操作类 * Date: 2017/7/13 * Time: 14:22 */class Test{ /** 姓名 */ public $name; /** 生日 */ public $birth; /** * 构造函数方法 __construct 它是一个魔术方法 * 它是在创建对象时被自动调用 * 一个类中有且只能有一个构造函数 * 构造函数可以带参数,这些参数通常是用来给类的属性进行初始化赋值 */ public funct

C++异常与析构函数及构造函数

析构函数不要抛出异常. 构造函数可以抛出异常,但是要谨慎. 原因下面这篇文章讲的不错,转载如下: http://jarfield.iteye.com/blog/811703 写Java代码的时候,遇到错误总是喜欢抛出异常,简单实用.最近开始写C++代码,发现异常没那么简单,使用须谨慎. 翻阅了<Effective C++> <More Effective C++><Inside The C++ Object Model>的相关章节,大概弄明白了一些东东,总结在本文. 本

sdut 3-3 构造函数的调用(高级)

3-3 构造函数的调用(高级) Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握创建普通对象.创建对象数组和动态创建和析构对象时调用构造函数和析构函数的时机: 要求创建一个类A:类中仅包含构造函数和析构函数,按照程序的输出写出类的定义和主函数main中的代码. 输入 无 输出 输出共有11行数据,分别如示例输出所示 示例输入 无 示例输出 ----begin main--- constructing an object of A

sdut 3-2 构造函数的调用

3-2 构造函数的调用 Time Limit: 1000MS Memory limit: 65536K 题目描述 通过本题目的练习可以掌握构造函数和析构函数的调用: 创建类A:类中仅包含构造函数和析构函数,按照程序的输出写出类的定义和主函数main中的代码. 输入 无 输出 输出数据有4行,分别代表对构造函数和析构函数的调用:本练习要求所编写程序的输出必须与示例相同. 示例输入 无 示例输出 Constructing an object of A Constructing an object o