关于类的问题

O湛狼O 2010-05-10 12:14:41
#include<iostream>
using namespace std;
class PComplex;
class Complex
{
private:
double real;
double image;
public:
Complex(PComplex * PC= NULL)
{

}
void display()
{
cout<<real<<","<<image<<endl;
}
};

class PComplex
{
private:

public:

};

void main()
{
PComplex P1;
Complex C1;
C1 = &P1;
cin.get();
}
上面的程序可以正确运行,但是我把Complex类构造函数的形参去掉,就出错了,错的地方在C1 = &P1;这句,为什么?构造函数关这里什么事? 希望有会的能留个Q,我还有很多关于这里的小问题。。
...全文
82 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhixi 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lijiantao923 的回复:]
引用 1 楼 pengzhixi 的回复:
C1 = &amp;P1;//通过Complex(PComplex * PC= NULL)这个构造函数先构造一个临时对象,然后调用赋值运算符来给C1赋值。

C1 = & P1,为什么要建立临时对象?不是直接取地址赋给C1吗?
[/Quote]

没那么简单,如果是Complex C1= & P1;这就就可以优化掉临时对象。
pengzhixi 2010-05-10
  • 打赏
  • 举报
回复
NND,发错地放了。
O湛狼O 2010-05-10
  • 打赏
  • 举报
回复
还有,P1是指针吗?为什么可以接收地址呢?不是要指针才能接收地址吗?如果P1是指针的话,那C1应该也是指针啊,那两个指针就可以直接赋值啦,为什么还要取地址呢?
O湛狼O 2010-05-10
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengzhixi 的回复:]
C1 = &P1;//通过Complex(PComplex * PC= NULL)这个构造函数先构造一个临时对象,然后调用赋值运算符来给C1赋值。
[/Quote]
C1 = & P1,为什么要建立临时对象?不是直接取地址赋给C1吗?
liutengfeigo 2010-05-10
  • 打赏
  • 举报
回复
你去掉参数,就等于写了自己的默认构造函数
写了默认构造函数,没有写赋值构造函数和拷贝构造函数。
cattycat 2010-05-10
  • 打赏
  • 举报
回复
C1 = &P1;
因为你的构造函数是PComplex的指针,所以可以通过这个赋值构造,会自动类型转换。去掉了这个形参,无法转换就不行了
wuyu637 2010-05-10
  • 打赏
  • 举报
回复
你去掉参数,就等于写了自己的默认构造函数
写了默认构造函数,没有写赋值构造函数和拷贝构造函数。

==============

c++有些比较诡异的地方都是由于编译器自动做了一些你不知道的事情,比如,一般情况下 会给你的类添加默认构造函数和 一些其他的构造函数,
但是如果你自己定义了默认的构造函数,这些其他的默认构造函数,编译器就不帮你添加了。


=====================


去看本书,c++面向对象模型
pengzhixi 2010-05-10
  • 打赏
  • 举报
回复
如果没有那个参数的话,你不可能通过构造函数构造这个临时对象的。
pengzhixi 2010-05-10
  • 打赏
  • 举报
回复
C1 = &P1;//通过Complex(PComplex * PC= NULL)这个构造函数先构造一个临时对象,然后调用赋值运算符来给C1赋值。

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧