C#与C++的问题,好混乱啊?

zhanglong19891129 2013-02-27 10:04:21
public  class ClassTest
{
public:
ClassTest(){}
ClassTest(int m,int n){a=m;b=n;}
ClassTest(const ClassTest &c)
{
cout<<"复制构造函数"<<endl;
a=c.a;
b=c.b;
}
ClassTest operator=(ClassTest &d)
{
a=d.a;
b=d.b;

return d;
}
void show()
{
cout<<"the value is"<<a<<"and"<<b<<endl;
}

void SetValue(int g,int k)
{
a=g;
b=k;
}

private:
int a;
int b;
};
//在主函数中调用
int main(array<System::String ^> ^args)
{

ClassTest c1(3,4),c2,c3;
c3=c1;
c2=c1;
c2.show();
c3.show();
c1.SetValue(8,6);
c2.show();
c3.show();


问题1:C3=C1的时候会执行上门的重载中,返回一个对象,在返回之前会调用复制构造函数,然后返回一个新的对象,所以这时候,上面红色的部分就应该经验删除掉啊?因为在复制构造函数中会进行赋值a,b?????
为什么去掉红色部分的时候,没有得到想要的结果??

在修改下程序
ClassTest& operator=(ClassTest &d)
{
a=d.a;
b=d.b;

return d;
}
问题2:
这个重载“=”后返回的是一个引用对象,C3=C1 这个返回的应该就是C1吧?意思就是C3,C1是同一个对象吧,那么在用过c1.SetValue(6,8)修改C1,按理说C3也会修改啊??

问题3:C++的函数指针与C#的委托有什么区别???

注释:本人先学的是C++,之后学的C#,C#工作半年之后反过来做C++就感觉特别混乱了??求高人指点啊?

...全文
371 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
真相重于对错 2013-03-02
  • 打赏
  • 举报
回复
你没有理解什么是operator=,如果你实现了operator =, c3=c1 其实就是 c3.operator(c1);
zhanglong19891129 2013-03-01
  • 打赏
  • 举报
回复
问题1和 2 来个人啊
真相重于对错 2013-02-28
  • 打赏
  • 举报
回复
区别大了去了, 不是一个东西
zhanglong19891129 2013-02-27
  • 打赏
  • 举报
回复
c#委托其实就类似c++函数指针 这个知道了,就是想问下 有什么区别没有?
zhanglong19891129 2013-02-27
  • 打赏
  • 举报
回复
给点资料咯。。。
gxingmin 2013-02-27
  • 打赏
  • 举报
回复
类拷贝啊,你看看资料,说的很清楚 c#委托其实就类似c++函数指针
zhanglong19891129 2013-02-27
  • 打赏
  • 举报
回复
问题1:中的红色部分是:
ClassTest operator=(ClassTest &d)
        {
            a=d.a;
            b=d.b;       
            return d;
        } 

7,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 VC.NET
社区管理员
  • VC.NET社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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