由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 一个让我比较困惑的问题 c++ inheritence
相关主题
一个inheritance 的问题operator overloading (C++)
这段code有啥问题?c++ operator overloading question
set operation in c请问关于overloading <<
why use static function here?问题的根源找到了
问个overloading new operator的问题Go不支持operator overload
question overloading ++ errorambiguous operators in c++
one question about overloading operator delete[C++] 入门级问题 increment and decrement operators
How to overload global new operator?why copy assignment operator returns non-const type?
相关话题的讨论汇总
话题: set2话题: operator话题: base话题: c++
进入Programming版参与讨论
1 (共1页)
k***s
发帖数: 277
1
也算是c++老手了,今天遇到一个和奇怪的问题,具体
见以下程序。关键是set(),set2()的结果不同,也就是
set : ((c_base*)this)->operator[](i) = p;
set2: ((c_base)*this).operator[](i) = p;
的区别在那里?(set2无法改变数组元素)
我用的是linux, gcc 3.4.6,结果是:
0 : 1
1 : 2
2 : 3
0 : 1
1 : 2
2 : 3
0 : 1
1 : 0
2 : 3
t****t
发帖数: 6806
2
当然不同
(c_base*)this是把指针类型转换,指向的还是原来的地方
(c_base)*this是创造临时对象,换地方了,当然不能改原来值
老革命遇到新问题????

【在 k***s 的大作中提到】
: 也算是c++老手了,今天遇到一个和奇怪的问题,具体
: 见以下程序。关键是set(),set2()的结果不同,也就是
: set : ((c_base*)this)->operator[](i) = p;
: set2: ((c_base)*this).operator[](i) = p;
: 的区别在那里?(set2无法改变数组元素)
: 我用的是linux, gcc 3.4.6,结果是:
: 0 : 1
: 1 : 2
: 2 : 3
: 0 : 1

t****t
发帖数: 6806
3
BTW, 不知道你干嘛要overload这些,直接用父类的就好了

【在 t****t 的大作中提到】
: 当然不同
: (c_base*)this是把指针类型转换,指向的还是原来的地方
: (c_base)*this是创造临时对象,换地方了,当然不能改原来值
: 老革命遇到新问题????

D****g
发帖数: 2860
4
区别是后者是把value转换了(a new instance is created)

【在 k***s 的大作中提到】
: 也算是c++老手了,今天遇到一个和奇怪的问题,具体
: 见以下程序。关键是set(),set2()的结果不同,也就是
: set : ((c_base*)this)->operator[](i) = p;
: set2: ((c_base)*this).operator[](i) = p;
: 的区别在那里?(set2无法改变数组元素)
: 我用的是linux, gcc 3.4.6,结果是:
: 0 : 1
: 1 : 2
: 2 : 3
: 0 : 1

k***s
发帖数: 277
5
你说的对。我一直没有写过类似的代码,所以没有太注意。
新水上有人也给过解答. 正确的写法有好几种,
((c_base*)this)->operator[](i)
((c_base&)*this).operator[](i)
this->c_base::operator[](i)
我现在用的是最后一种,觉得比较简洁明了

【在 t****t 的大作中提到】
: 当然不同
: (c_base*)this是把指针类型转换,指向的还是原来的地方
: (c_base)*this是创造临时对象,换地方了,当然不能改原来值
: 老革命遇到新问题????

k***s
发帖数: 277
6
我用deque作为基类, 写了一个管理指针的container,
不过我只需要push_back, pop_back, size的几个接口。

【在 t****t 的大作中提到】
: BTW, 不知道你干嘛要overload这些,直接用父类的就好了
t****t
发帖数: 6806
7
我的意思是你根本不需要写push_back, op[], size,因为你反正是调用父类的,写不写
都一样,不写说不定还速度快点

【在 k***s 的大作中提到】
: 我用deque作为基类, 写了一个管理指针的container,
: 不过我只需要push_back, pop_back, size的几个接口。

k***s
发帖数: 277
8
比如pop_back, 作为指针,我还需要delete.
另外我也不希望直接用[] operator来改变指针的值。

【在 t****t 的大作中提到】
: 我的意思是你根本不需要写push_back, op[], size,因为你反正是调用父类的,写不写
: 都一样,不写说不定还速度快点

1 (共1页)
进入Programming版参与讨论
相关主题
why copy assignment operator returns non-const type?问个overloading new operator的问题
one question about structquestion overloading ++ error
想练习一下C++one question about overloading operator delete
one more interview questionHow to overload global new operator?
一个inheritance 的问题operator overloading (C++)
这段code有啥问题?c++ operator overloading question
set operation in c请问关于overloading <<
why use static function here?问题的根源找到了
相关话题的讨论汇总
话题: set2话题: operator话题: base话题: c++