注册 登录
编程论坛 C++教室

副本构造函数的问题?

newyj 发布于 2008-03-09 11:17, 945 次点击
副本构造函数 有什么用 怎么用 不是很清楚的
谢谢了
9 回复
#2
sunkaidong2008-03-09 11:19
你举个例子看看...
#3
aipb20072008-03-09 12:22
你说的是 copy constructor 吧?

Type A;
Type B = A;    //here use copy constructor
#4
aipb20072008-03-09 12:35
我只是说那里调用了Type类的拷贝构造函数。
原型是:Type(const Type&)
一般来说定义了拷贝构造函数,那么就要定义=操作符和析构函数。
Type B = A;至于这句究竟是调用的=操作符,还是拷贝构造函数,你可以自己写代码跟踪下,这样印象更深刻。
#5
sunkaidong2008-03-09 12:37
谢谢啊..呵呵
#6
newyj2008-03-09 13:13
谢谢 楼上 两位
例子:    TYPE::TYPE(CONST TYPE& OBJECT){
                       //代码;
                       }
TYPE是类的对象
我就是 不知道 有构造函数就行了 再 弄个副本构造函数 有什么用啊
#7
aipb20072008-03-09 14:29
你自己不定义拷贝构造,赋值操作符,析构,那么编译器会生成默认的函数,但是它执行的是浅拷贝。某些场合下不能得到你期望的结果。

再进一步了解,建议你找本书看 “复制控制” 这一章
#8
sunkaidong2008-03-09 16:05
#include"iostream.h"
class typebase
{
public:
    int a;
    int b;
public:
    typebase(int a,int b)
    {
        this->a=a;
        this->b=b;
    };
    virtual int v(int i,int j)
    {
        return i-j;
    };
};
class type:public typebase
{
public:
    int a;
    int b;
    type(int a,int b):typebase(a-50,b-50)
    {
        this->a=a;
        this->b=b;
    }
int    v(int i,int j)
    {
        return i+j;
    }
};
void main()
{
    type a(100,100);
    typebase &b=a;
    typebase b1=a;
    cout<<b.a<<endl;
    cout<<b.v(68,69)<<endl;
    cout<<b1.v(68,69)<<endl;
}
#9
leeco2008-03-09 16:45
在3种情况下会调用拷贝构造器
1。使用一个对象对另一个对象初始化。
2。以对象作函数参数传递。
3。返回一个对象。
#10
随心2008-03-09 16:57
复制控制,书上应该都有吧。
1