| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 384 人关注过本帖
标题:c++运算符重载的问题。。头疼啊
只看楼主 加入收藏
lkop911
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-1
收藏
 问题点数:0 回复次数:4 
c++运算符重载的问题。。头疼啊
#include<iostream>

#include<cstring>

using namespace std;

class st

{

private:

 int x,y;

 char *name;

public:

 st(const int x1,int y1,char *name1)

 {

  x=x1;y=y1;

  name=new char[strlen(name1)+1];

  strcpy(name,name1);

 }

 st()

 {

  name=NULL;

  x=y=0;

 }

 st &operator=(const st &p);

 

 ~st()

 {

  delete[]name;

 

 }

 void print()

 {

  cout<<x<<endl<<y<<endl<<name<<endl;

 }

};

#include"eight.h"

st &st::operator=(const st&p)(为什么COM1不给初始化,程序就不执行这一段代码啊?,请教老鸟仔细的说一下)

{

  if(this!=&p)

  {

   x=p.x;y=p.y;

   delete []name;

   name=new char[strlen(p.name)+1];

   cout<<"调用复制构造函数"<<endl;

   if(name!=NULL)

   {

    strcpy(name,p.name);

    return (*this);

   }

  }

  else

  {

   cout<<"没改变"<<endl;

   return (*this);

  }

 }

int main()

{

 st com(1,2,"xbx");

 st com1=com;

 com1.print();

}
搜索更多相关主题的帖子: void include public 头疼 private 
2012-09-01 23:53
zhuanjia0
Rank: 4
等 级:业余侠客
威 望:3
帖 子:86
专家分:232
注 册:2012-1-13
收藏
得分:0 
因为那是复制构造函数,执行st com1=com;将com的内容复制给com1,调用了复制构造函数。
如果不执行st com1=com;复制构造函数没有被调用。
2012-09-02 00:25
lkop911
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2012-9-1
收藏
得分:0 
....这程序是有调用啊。。可是我重载了赋值运算符啊,程序为什么调用默认的复制构造函数??
2012-09-02 10:59
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
二楼说 st com1=com; 是调用拷贝构造,和你重载不重载赋值操作没有任何关系
st com1=com; 这是初始化,调用构造函数
st com1; com1=com; 这才是赋值
2012-09-03 11:43
zhuanjia0
Rank: 4
等 级:业余侠客
威 望:3
帖 子:86
专家分:232
注 册:2012-1-13
收藏
得分:0 
回复 4楼 rjsp
复制跟赋值不一样的
2012-09-03 22:53
快速回复:c++运算符重载的问题。。头疼啊
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.025025 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved