有关C++对象中的数据绑定问题。书籍来源《深度探索c++对象模型》

[复制链接]
查看11 | 回复5 | 2021-1-27 05:57:01 | 显示全部楼层 |阅读模式
再看到3.1节有关DataMember的绑定这一节的时候,书上总结的结果有点不是很明白。我按照书上的例子做了个实验,输出的结果却让我很是confused,大家帮我理解下。
程序代码如下:
#include
#include
usingnamespacestd;
typedefdoublelength;
classPoint3D
{
public:
voidnumber(lengthval){_val=val;}
lengthnumber(){return_val;}
private:
typedefintlength;
length_val;
};
intmain()
{
Point3Dpoint;
point.number(33.3);
cout -->
回复

使用道具 举报

千问 | 2021-1-27 05:57:01 | 显示全部楼层
在你的类命名空间中用的是typedefintlength;
你的main函数是全局空间用的是typedefdoublelength;
类型定义存在的范围不同,没有什么的
回复

使用道具 举报

千问 | 2021-1-27 05:57:01 | 显示全部楼层
改成这样你就明白了:
classPoint3D
{
private:
typedefintlength;
length_val;
public:
voidnumber(lengthval){_val=val;}
lengthnumber(){
return_val;
}
};
回复

使用道具 举报

千问 | 2021-1-27 05:57:01 | 显示全部楼层
类中的类型定义是在类变量定义的前面
所以放在前后都一样
回复

使用道具 举报

千问 | 2021-1-27 05:57:01 | 显示全部楼层
你们讲的我都同意,可还是没有解决我的困惑,我只是想知道为什么类型和输出的数值结果前后不一致?
回复

使用道具 举报

千问 | 2021-1-27 05:57:01 | 显示全部楼层
注意typeid对于内建类型int之类,是“编译”时就计算确定了的。
所以:
typeid(point.number()).name()
返回的是
lengthnumber(){return_val;}
typedefdoublelength;
length_val;是double_val
此时typedefintlength;还没生效。

point.number(33.3);
后:
typedefintlength;
length_val=33
就是int_val=33
是“运行”时的数据。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行