首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

【初学者有关问题】类的缺省赋值函数什么时候失效啊

2012-02-15 
【菜鸟问题】类的缺省赋值函数什么时候失效啊?classTest{public:constintjTest():j(3){}}voidmain(void){T

【菜鸟问题】类的缺省赋值函数什么时候失效啊?
class   Test
{
        public:
        const   int   j;
Test():j(3){}
       
};
void   main(void)
{
Test   t2,t1;
t2=t1;       //(1)error   C2582:   'Test '   :   'operator   = '  
                  //function   is   unavailable
Test   tt=t2;//(2)
}
(1)为什么说赋值函数不能用?一般在什么时候赋值函数就失效了啊?
(2)为什么拷贝构造函数没有问题啊?

编译环境:vc++6.0

谢谢各位大哥大姐叔叔伯伯大妈婶婶。。。。。了


[解决办法]
j是const的,只能初始化,不能赋值.
Test tt=t2;//这是初始化tt,没问题

Test t2,t1;//在这里t2已经被初始化了,t2.j==3;
t2=t1; //错误!不能给t2的数据成员const int j赋值!
其实你想一想呀,要是const对象的值还能改变,那const还有什么意义呢?
[解决办法]
问题1:对于内含const members或者reference members的class,编译器是不会隐式生成一个assignment运算符的,这一点在effective c++条款45(第二版)中有说明

问题2:拷贝构造函数并不等同于assignment运算符的,因为它只在构造时候使用

热点排行