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

这个x是哪来的

疯子傻了 发布于 2012-12-11 15:23, 478 次点击
问题在红色注释中!!!!!!!!!!!  谢谢


#include <iostream>
using namespace std;
class A
{
public:
    A(int i){cout<<"执行构造函数创建一个对象\n";x=i;}
    A(A&a){x=a.x ;
/* 这个x是哪来的,如果是 “private: int x;”中的 x,干嘛要把x赋给x,这不是很无聊???

*/
cout<<"执行复制构造函数创建一个对象\n";}
    ~A(){cout<<"执行析构函数!\n";}
    int get(){return x;}
private:
    int x;
};
A func()
{
    cout<<"跳转到func函数中!\n";
    A *p=new A(99);
    cout<<"堆中对象的地址:"<<p<<endl;
    return *p;
}
int main()
{
    A&r=func();
    cout<<"堆中对象的副本的地址:"<<&r<<endl;
    cout<<r.get()<<endl;
    A*p=&r;
    delete p;
    return 0;
}

[ 本帖最后由 疯子傻了 于 2012-12-11 15:25 编辑 ]
6 回复
#2
mmmmmmmmmmmm2012-12-11 15:31
A(A&a){x=a.x ;
/* 这个x是哪来的,如果是 “private: int x;”中的 x,干嘛要把x赋给x,这不是很无聊???

*/

这个x是形参里面a对象的私有成员,把a.x赋给新对象的x。
不无聊。
复制构造函数


#3
疯子傻了2012-12-11 20:29
回复 2楼 mmmmmmmmmmmm
把a.x赋给新对象的x 中的新对象x是在哪声明的呢
#4
qunxingw2012-12-14 23:23
程序代码:
#include <iostream>
using namespace std;
class A
{
public:
    A(int i){cout<<"执行构造函数创建一个对象\n";x=i;}
    A(A&a){x=a.x ;
/* 这个x是哪来的,如果是 “private: int x;”中的 x,干嘛要把x赋给x,这不是很无聊???

*/
cout<<"执行复制构造函数创建一个对象\n";}
    ~A(){cout<<"执行析构函数!\n";}
    int get(){return x;}
private:
    int x;
};
A func()
{
    cout<<"跳转到func函数中!\n";
    A *p=new A(99);
    cout<<"堆中对象的地址:"<<p<<endl;
    return *p;
    delete p;
}
int main()
{
    A&r=func();
    cout<<"堆中对象的副本的地址:"<<&r<<endl;
    cout<<r.get()<<endl;
    A *p=&r;
   //
    return 0;
}


诸多不会,试着调试

[ 本帖最后由 qunxingw 于 2012-12-14 23:24 编辑 ]
#5
liao254283012012-12-16 18:19
copy constructor
从引用的类中调出X赋值给新类中的X
#6
huang19381202012-12-17 09:33
取经的 抱歉打扰了
#7
pangding2012-12-19 10:08
以下是引用疯子傻了在2012-12-11 20:29:55的发言:

把a.x赋给新对象的x 中的新对象x是在哪声明的呢

当前对象自己有个 x,形参 a 有个 x,把 a 的 x 赋到当前对象的 x 上不是很有道理的一件事嘛。

现在是在定义类的成员函数,声明在类的定义里面。这是成员函数访问数据成员的常见形式。
1