c++ 默认构造函数,构造函数,复制构造函数,赋值操作符,析构函数调用示例

原创 2015年11月18日 00:16:29
#include <iostream>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <list>
#include <string>



struct Noname
{
        //default constructor
        Noname():pstring(new std::string),i(0),d(0) {  std::cout<<"default constructor called"<<std::endl;}
        // constructor
        Noname(int in,double dou):pstring(new std::string),i(in),d(dou) { std::cout<<"constructor called"<<std::endl;}
        //copy constructor
        Noname (const Noname & no):pstring(new std::string),i(no.i),d(no.d)
        {
            std::cout<<"copy constructor called"<<std::endl;
            *pstring = * (no.pstring);
        }

        //assign operator
        Noname& operator=(const Noname &);

        ~Noname()
        {
            std::cout<<"destructor is called "<<std::endl;
            delete pstring;

        }

    public:
        std::string *pstring;
        int i;
        double d;
};



Noname& Noname::operator=(const Noname & no)
{
    std::cout<<"assign operator called "<<std::endl;
    *pstring = * (no.pstring);
    i = no.i;
    d = no.d;
}

void fuck_test1(Noname no)
{


}




void fuck_test2(Noname & no)
{


}




Noname fuck_test3()
{
    Noname no;
    return no;
}


Noname&  fuck_test4()
{
    Noname no;
    return no;
}
</pre><pre name="code" class="cpp">
int main(int argc,char* argv[])
{
    Noname test(5,3);
    std::cout<<test.i<<"   "<<test.d<<std::endl;
    Noname test1(test);
    std::cout<<test1.i<<"   "<<test1.d<<std::endl;
    Noname test2;
    std::cout<<test2.i<<"   "<<test2.d<<std::endl;
    test2 =  test1;
    std::cout<<test2.i<<"   "<<test2.d<<std::endl;

    if(true)
    {
        Noname testk(5,5);

    }
</pre><pre name="code" class="cpp">     Noname* pNoname = new Noname();
     delete pNoname;


    std::vector<Noname> Novect(5);


    fuck_test1(test);
    fuck_test2(test);
    fuck_test3();
    fuck_test4();

    return 0;
}
</pre><pre name="code" class="cpp">
</pre><pre name="code" class="cpp">
</pre><p></p><pre name="code" class="cpp">



程序运行结果:

constructor called
5   3
copy constructor called
5   3
default constructor called
0   0
assign operator called 
5   3
constructor called
destructor is called
default constructor called
destructor is called
default constructor called
default constructor called
default constructor called
default constructor called
default constructor called
copy constructor called
destructor is called
default constructor called
destructor is called
default constructor called
destructor is called
destructor is called
destructor is called
destructor is called
destructor is called
destructor is called
destructor is called
destructor is called
destructor is called











仔细的研究下本程序,会对构造函数,析构函数,复制构造函数,赋值操作符的概念容会贯通;

同时会对容器元素的构造,动态对象的创建,销毁, 非引用参数形参传递和引用形参传,  非引用返回值,引用返回值的原理有更直观的理解

版权声明:本文为博主原创文章,未经博主允许不得转载。

总结c++类的构造函数 拷贝构造函数 析构函数 赋值运算符重载的特点以及函数调用顺序

对 c++类成员函数中的构造函数 拷贝构造函数 析构函数 赋值运算符重载的一些特点以及函数调用顺序,并附上例子,希望对大家有帮助,有错误大家可以指出来。...
  • wenqiang1208
  • wenqiang1208
  • 2016年10月18日 19:04
  • 1147

复制构造函数和析构函数经典例子

#include using namespace std; class A { public: A() { cout
  • u014082714
  • u014082714
  • 2015年04月16日 10:15
  • 1060

C++ 构造函数、默认构造函数、析构函数和对象初始化

#include using namespace std; class Student{ private: int m_age; int m_grade; ...
  • ivnetware
  • ivnetware
  • 2016年12月10日 12:37
  • 938

C++中构造函数,拷贝构造函数,析构函数

C++中默认构造函数就是没有形参的构造函数。准确的说法,按照《C++ Primer》中定义:只要定义一个对象时没有提供初始化式,就是用默认构造函数。为所有 的形参提供默认实参的构造函数也定义了默认构造...
  • u012501459
  • u012501459
  • 2015年03月09日 21:29
  • 1478

类的构造函数 拷贝构造函数 赋值操作符 析构函数

类的那些函数~~~
  • C12345SDN
  • C12345SDN
  • 2014年03月16日 09:24
  • 1779

默认构造函数、构造函数、复制构造函数和赋值操作符

1默认构造函数 当一个类没有任何构造函数时,编译器将会合成一个默认构造函数。 那么编译器合成的默认构造函数是做什么用的呢?是初始化类的成员变量吗? 事实上不是。编译器合成的默认构造函数只是满足编...
  • KangRoger
  • KangRoger
  • 2014年05月25日 21:18
  • 2605

C++复制构造函数与重载赋值操作符

http://www.cnblogs.com/BlueTzar/articles/1223313.html 复制构造函数是一种特殊的构造函数,函数的名称必须和类名称一致,它的唯一的一个参数是本类型的一...
  • qq_30230091
  • qq_30230091
  • 2015年07月30日 16:21
  • 1189

默认构造函数和拷贝构造函数

如果类包含内置或复合类型的成员,则该类就不应该依赖于合成的默认构造函数,它应该定义自己的构造函数来初始化这些成员。...
  • Sun19910114
  • Sun19910114
  • 2014年10月08日 09:51
  • 2030

什么情况下C++编译器会生成默认的构造函数

问题:对c++初学者来说存在一个误区,如果类没有定义任何构造函数,编译器会自动生成默认的构造函数。   注意:这种说法是错误的。 正确的说法:惟有默认构造函数”被需要“的时候编译器才会合成默认构造...
  • zyl_1102179268
  • zyl_1102179268
  • 2017年03月05日 00:01
  • 771

union可以包含带有构造函数的对象不?

 今天在borland新闻组上看到这个问题,因为uion的所有成员都共享同样的内存,所以union中不能带有构造函数的对象。如下这个union:union {  AnsiString str;  li...
  • tanlijun37
  • tanlijun37
  • 2008年02月23日 11:16
  • 2460
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:c++ 默认构造函数,构造函数,复制构造函数,赋值操作符,析构函数调用示例
举报原因:
原因补充:

(最多只允许输入30个字)