游戏开发论坛

 找回密码
 立即注册
搜索
查看: 5510|回复: 16

关于类中的const函数声明问题,如果强制转换就不起作用了?

[复制链接]

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
发表于 2007-10-9 12:57:00 | 显示全部楼层 |阅读模式
测试代码如下:
#include<iostream.h>


class Base
{
        int a;
public:
        int* GetA() const {return (int*)&a;}
        void OutA() {cout<<a<<endl;}
        Base() {a = 6;}
};

void main()
{
        Base A;
        A.OutA();
        int* b = A.GetA();
        *b = 10;
        A.OutA();
}

在外部就改变 了private数据a的值...是不是可以理解为强制转换让类的私有数据暴露了?

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-9 15:57:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

不知道从OO的理论上是不是算暴露了,但C++是门实用主义的计算机语言,所以它讲究的封装性是有个范围的,同时留出很多方法准许你突破封装。

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-10-9 21:00:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

哦原来是这样,谢谢Funcman

103

主题

1432

帖子

1458

积分

金牌会员

Rank: 6Rank: 6

积分
1458
QQ
发表于 2007-10-9 21:53:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

用const int*

0

主题

3

帖子

0

积分

新手上路

Rank: 1

积分
0
发表于 2007-10-16 11:28:00 | 显示全部楼层

Re: 关于类中的const函数声明问题,如果强制转换就不起作

这个只是个const函数,不要跟const常量混淆了

18

主题

82

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2007-10-18 21:56:00 | 显示全部楼层

Re: 关于类中的const函数声明问题,如果强制转换就不起作

我决的是*b = 10;这一句,你通过int* b = A.GetA();把a的地址赋给了不,那当然可以通过b来修改a 的值了,所以我认为不是const的问题,也不是强制转换让类的私有数据暴露了的问题

18

主题

82

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2007-10-18 21:57:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

我决的是*b = 10;这一句,你通过int* b = A.GetA();把a的地址赋给了b,那当然可以通过b来修改a 的值了,所以我认为不是const的问题,也不是强制转换让类的私有数据暴露了的问题

66

主题

223

帖子

223

积分

中级会员

Rank: 3Rank: 3

积分
223
 楼主| 发表于 2007-10-19 23:51:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

但是GetA() 是声明为const 的函数
这个const到底是什么意思,通过const声明的函数出去居然能改动原来的数据成员,这和const不是有矛盾么?

86

主题

2251

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
QQ
发表于 2007-10-20 11:31:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

不改变类的数据,是指这个成员函数自己不会做改变的操作。出了函数之后做的改变操作,又不能说是这个函数做的。

0

主题

769

帖子

1052

积分

金牌会员

Rank: 6Rank: 6

积分
1052
发表于 2007-10-21 11:36:00 | 显示全部楼层

Re:关于类中的const函数声明问题,如果强制转换就不起作用

const函数只是说在其内部不能够调用非const函数而且不能够改变成员的值
LZ的函数上面的const函数没对值做任何变动
而只把其引用传给了b
而b既然是成员的引用对其所做的修改,那么跟这个函数应该没有关系吧
(个人理解)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-6-20 02:36

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表