构造函数 、析构函数 、拷贝构造函数 ~~~~~~~~~~拷贝构造函数

拷贝构造函数

1.拷贝构造函数作用:

①:程序中需要新建立一个对象,并用另一个同类的对象对它初始化;

②:当函数的参数为类的对象时,需要建立一个实参的拷贝;

③:函数的返回值是类的对象;

2 格式:

注意:关键字const是为了保护参数值,防止被改变

///在类外定义,加域符 ::
Box::Box(const Box &b)
{
    hei=b.hei;
    len=b.len;
    wid=b.wid;
}

3. 使用情况即考虑到其作用时

① 建立一个新的对象

#include<iostream>
using namespace std;

class box{
private:
    int a,b,c;
public:
    box(int x,int y,int z):a(x),b(y),c(z)
        {
            cout<<"构造函数"<<endl;
        }

    box(const box &q)
    {
        a=q.a;
        b=q.b;
        c=q.c;
        cout<<"拷贝构造函数"<<endl;
    }
    ~box()
    {
       cout<<"析构函数"<<endl;
    }

    int volum()
    {
        return a*b*c;
    }
};
int main()
{
    box A(4,5,6);
    box B(A);
    cout<<A.volum()<<endl;
    cout<<B.volum()<<endl;

}

② 当函数的参数为类的对象时,需要建立一个实参的拷贝;

#include<iostream>
using namespace std;

class box{
private:
    int a,b,c;
public:
    box(int x,int y,int z):a(x),b(y),c(z)
        {
            cout<<"构造函数"<<endl;
        }

    box(const box &q)
    {
        a=q.a;
        b=q.b;
        c=q.c;
        cout<<"拷贝构造函数"<<endl;
    }
    ~box()
    {
       cout<<"析构函数"<<endl;
    }

    int volum()
    {
        return a*b*c;
    }
};
    void fun(box M)///形参是类的对象
    {
        cout<<M.volum()<<endl;
    }

int main()
{
    box A(4,5,6);
    fun(A);///将A传入
    cout<<A.volum()<<" A "<<endl;

}

③ 函数的返回值是类的对象

#include<iostream>
using namespace std;

class box{
private:
    int a,b,c;
public:
    box(int x,int y,int z):a(x),b(y),c(z)
        {
            cout<<"构造函数"<<endl;
        }

    box(const box &q)
    {
        a=q.a;
        b=q.b;
        c=q.c;
        cout<<"拷贝构造函数"<<endl;
    }
    ~box()
    {
       cout<<"析构函数"<<endl;
    }

    int volum()
    {
        return a*b*c;
    }
};
    box WW()
    {
        box B(1,2,3);
        return B;
    }

int main()
{
    box A(0,0,0);
    A=WW();
    cout<<A.volum()<<endl;
}
///box B是在WW()函数定义的,在调用WW()结束后,B的生命周期结束,
///在函数WW()结束前的return语句调用了拷贝构造函数,赋值给A。
时间: 2024-10-12 07:55:32

构造函数 、析构函数 、拷贝构造函数 ~~~~~~~~~~拷贝构造函数的相关文章

类String的构造函数(包含一个拷贝构造函数)、析构函数和赋值函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数). class String { public: String(const char *str = NULL); // 普通构造函数 String(const String &other); // 拷贝构造函数 ~ String(void); // 析构函数 String & operate =(const String &other); // 赋值函数 // 相加函数,如果没

c++类大四个默认函数-构造函数 析构函数 拷贝构造函数 赋值构造函数

每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数).对于任意一个类A,如果不编写上述函数,C++编译器将自动为A 产生四个缺省的函数,例如: A(void);//缺省的无参数构造函数 A(const A&a);//缺省的拷贝构造函数 -A();//缺省的析构函数 A&operator=(const A &a);//缺省的赋值构造函数 1).“缺省的拷贝构造函数”和“缺省的赋值函数”均采用“位拷贝”而非“值拷贝”的方式来实现,倘

C++什么时候调用拷贝构造函数和什么时候调用构造函数

拷贝构造函数 都是在什么情况下调用??? /* ** 什么时候调用拷贝构造函数 ** */ #include <iostream> using namespace std; //日期类 class Date{ public: int year,month,day; Date(){//无参构造 cout << "日期类的构造函数" << endl; } ~Date(){ cout << "日期的析构函数" <<

【C++对象模型】构造函数语意学之二 拷贝构造函数

关于默认拷贝构造函数,有一点和默认构造函数类似,就是编译器只有在[需要的时候]才去合成默认的拷贝构造函数. 在什么时候才是[需要的时候]呢? 也就是类不展现[bitwise copy semantics]时,即不展现[逐位次拷贝]时,才会合成默认拷贝构造函数. 所谓的[逐位次拷贝],也就是简单的赋值,不管类内的数据成员是int还是char*指针,都是简单的赋值,这叫[逐位次拷贝]. 那什么请下不展现[逐位次拷贝]呢? 有四种情况: ①类中有一个类对象成员,而该类对象成员声明了一个默认拷贝构造函数

C\C++ vector 构造函数 &amp; 析构函数

#include <iostream> #include <vector> using namespace std; class Obj { public: Obj(void){cout<<"Obj(void)"<<" "<<countOne<<endl;countOne++;} Obj(int x){cout<<"Obj(int x)"<<"

构造函数 析构函数

;构造函数 构造函数和类同名,无类型和返回值 构造函数可以重载 构造函数编译器在对象申请完内存地址空间之后帮你调用,如果有父类先一层层的调完父类的构造函数最后子类 ;析构函数 析构函数只调用一次 析构函数在出对象所属作用域之后立马被调用 析构函数无类型,返回值参数 西沟函数可以外部手工调用 ;拷贝构造函数 拷贝构造函数参数为引用参数 类& object 拷贝构造函数在发生对象拷贝的时候被调用,例如函数传参如果形参是对象类型就会发生,其他类型不会, (const 类& object) 如果实

虚函数-构造函数-析构函数

在C++里面,虚函数的作用就是  实现 多态 构造函数可以是  虚函数,但是这样做没有多大意义,特别是在有继承关系的时候估计就不行了,没有继承关系的时候,这个类就不会被创建,编译应该是没有问题的, 析构函数 在有继承的时候,经常用虚函数,因为在  子类有实例的时候,如果让父亲的指针指向  子类的实例,而子类的实例中有new了新的地址空间,那么调用父亲的析构函数,如果父亲的析构函数不是虚的,那么只负责把父亲自己的指针回收,但是子类中new就没有回收:而如果析构函数是虚函数,那么首先是释放子类申请的

C++基础知识---构造函数 &amp; 析构函数 &amp; 虚拟析构函数

问题: 类需要一个无参的构造函数么? 类需要一个析构函数么? 类的构造函数需要初始化所有的对象成员么? 类需要一个虚析构函数么? 有些类需要虚析构函数只是为了声明他们的析构函数是虚的.绝不会用作基类的类是不需要虚析构函数的:任何虚函数只在继承的情况下才有用.假设B为父类,D为子类,B何时需要一个虚析构函数?只有有人肯呢过会对实际指向D类型对象的B*指针执行delete表达式,你就需要给B加上一个虚析构函数,即使B和D都没有虚函数,这也是需要的 B* bp = new D; Delete bp; 

C++反汇编第一讲,认识构造函数,析构函数,以及成员函数

C++反汇编第一讲,认识构造函数,析构函数,以及成员函数 以前说过在C系列下的汇编,怎么认识函数.那么现在是C++了,隐含有构造和析构函数 一丶认识构造函数 高级代码: class MyTest { public: MyTest(); ~MyTest(); public: DWORD m_dwTest; }; MyTest::MyTest() { printf("1111\r\n"); //构造的时候先打印 } MyTest::~MyTest() { printf("2222

C++构造函数详解(复制构造函数)

转载自:http://www.cnblogs.com/raichen/p/4752025.html 更多内容详见:http://blog.csdn.net/lwbeyond/article/details/6202256 构造函数是干什么的 该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员. 构造函数的种类 1 class Complex 2 { 3 4 private : 5 double m_real;