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

c++运算符重载的问题。。头疼啊

lkop911 发布于 2012-09-01 23:53, 385 次点击
#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();

}
4 回复
#2
zhuanjia02012-09-02 00:25
因为那是复制构造函数,执行st com1=com;将com的内容复制给com1,调用了复制构造函数。
如果不执行st com1=com;复制构造函数没有被调用。
#3
lkop9112012-09-02 10:59
....这程序是有调用啊。。可是我重载了赋值运算符啊,程序为什么调用默认的复制构造函数??
#4
rjsp2012-09-03 11:43
二楼说 st com1=com; 是调用拷贝构造,和你重载不重载赋值操作没有任何关系
st com1=com; 这是初始化,调用构造函数
st com1; com1=com; 这才是赋值
#5
zhuanjia02012-09-03 22:53
回复 4楼 rjsp
复制跟赋值不一样的
1