jains521
一起来读<<C++ primer>>_入门篇_数据类型( 1.13更新至2楼 )

本帖最后由 jains521 于 2013-1-13 13:42 编辑

从第二篇开始, 就要真正进入C++的世界了, 准备好了吗?

现在开始在脑海中设计一个场景.

////////////////////////////////////////////////////////

有一条街叫中兴街, 长约1000米, 街的中间于一条叫长安街相交, 所以有一个十字路口.

这条街是一个商业街, 张三在中兴街上, 门牌为1006的地方租了一个店铺叫杂烩, 做出售人口用.(!!!好吧就是出售人口了)

在中兴街的大道上, 李四在逛街, 李四逛到张三的店铺, 决定买一个人口回去.(!!!擦,,这人口是什么..)

(以上够了, 不设计了, 太难了!!!)

///////////////////////////////////////////////////////

用类型分析一下: 有街, 有人, 有店铺, 有货物. 这些构成了一条街的场景, 我们把街, 人, 店铺, 货物, 看成数据类型.

中心街是街类型定义的对象; ( 街 中心街, 长安街; )

张三和李四是人类型定义的对象; ( 人 张三, 李四; )

同理于店铺和货物.

在反过来看一下, 也有可能是这样的:

强调声明一点, 以下为比喻, 比喻, 比喻.

[mw_shl_code=cpp,true]class 街

{

public: //公有的, 大家都可以来这条街租店铺.

出租店铺给( 人, 店铺名字); // 额 不解释了

//这里应该有一个方法, 街上店铺可以卖东西.

private: // 私有的, 街为天朝所有, 店铺为租房所有, ,

地址;

长度;

店铺;

};

class 店铺

{

public:

卖东西给(人, 货物名);

private:

所有者;

货物;

};[/mw_shl_code]

以上为街类型和店铺类型, 现在我们来使用它们.

[mw_shl_code=cpp,true]店铺 张三的店铺(杂烩);

人 张三;

街 中兴街; // 当预设为地址吧

中心街.出租店铺给( 张三, 杂烩); // 这样就在中心街开了店.[/mw_shl_code]

//然后货物可以卖给李四;

可以从张三的店铺里购买, 也可以在中心街上的张三的店铺购买.

以上为设想和C++类型的类比, 介绍基本类型和自定义类型.

cloudlelouch
moxiagy
明明在用伪代码
展开Biu

@@3!! lz明明在用伪代码。。

[查看全文]
秋声赋
是不支持中文变量名的吧
展开Biu

不错

不过C++是不支持中文变量名的吧?

而且也不推荐 入门的人 用中文做变量名, 尽量习惯英文

[查看全文]
jains521
斑斑勿删
展开Biu

占楼贴3! 斑斑勿删!

[查看全文]
jains521
斑斑勿删
展开Biu

占楼贴2! 斑斑勿删!

[查看全文]
jains521
本帖最后由
展开Biu

本帖最后由 jains521 于 2014-2-23 21:51 编辑

在说类型之前, 先去了解下电脑的存储单位 这里是传送门

C++预定义的类型可以表示整数, 浮点数及单字符, 分别是

int(整型, 2^32-1, 4字节), short(短整型, 2^15-1, 2字节(!!short为有符号的2字节长?)), long(长整型, 2^32-1, 4字节),

float(单精度浮点, 4字节), double(双精度浮点, 8字节)

char(单字符, 1字节)

还有一个表示逻辑类型的布尔类型, bool(1位)

换位思考:

类型是用来存储数据的容器, 当我为一个容量为500k的杯子倒进1000k的水的时候会发生什么样的情况?

测试一下, 用手上的编译工具, vc6, vc2008, vc2012(额, 手上应该都有的吧, 没有就找度娘去.)

[mw_shl_code=cpp,true]//我们知道 无符号char型 的长度为1个字节, 1个字节可以容纳2^8也就是0-255的数, 所以容量就是255.

//那么我们将100 , 200, 300分别赋值给char型变量a, b, c会发生什么情况.

unsigned char a = 100;

unsigned char b = 200;

unsigned char c = 300;

//毫无疑问, 换位思考中杯子事件的情况发生了, "变量c将溢出".

//在看一个short无符号时容量为2^16-1 = 65535

unsigned short d = 65535;

unsigned short e = 65536;

//编译结果, 有警告产生[/mw_shl_code]

那么水溢出会有什么样的后果呢, 汗,,暴汗,,,

再那么计算机的容器溢出会有什么样的后果呢,

[mw_shl_code=cpp,true]//测试容器溢出的后果

#include *本站禁止HTML标签噢*

using namespace std;

int main()

{

unsigned short a = 65535;

cout <<a <<endl;

a = 65536;

cout <<a <<endl;

a = 65537;

cout <<a <<endl;

return 0;

}

[/mw_shl_code]

执行结果为:

[mw_shl_code=cpp,true]65535

0

1[/mw_shl_code]

可以想象的到这样的后果是什么. 你的钱包可以存1万块, 然后我在往里面塞一块钱, 天啊, 钱包里的钱变成1块钱了...那1万块哪里去了?

那1万块在别人的钱包里了..

对的.数据存在内存上的机制是如果本身这块内存满了, 如果unsigned short a指向的内存地址为1000 那么系统会开辟1002这块内存, 然后,将1000这内存清空, 溢出的部分继续往里存, 1002的值将+1.

也就是, a mod (2^16), 余下的数给a.

当然以上所有都不是我想要的. 那我们需要做的就是扩展a的内存, 用int去声明a, int a; 这样a的容量就有2^32-1了.

额, 如果int a的容量也满足不了的时候该怎么办?

这个时候就需要用到24k的脑子了.

可以设计一个类型, 对的c++支持这么做.

[mw_shl_code=cpp,true]//为了可以容纳更大数据的容器, 设计了一个MYINT类型.

//虽然它现在的功能只有现实.

#include *本站禁止HTML标签噢*

using namespace std;

class MYINT

{

public:

MYINT(int a, int b):m_a(a), m_b(b)

{}

void Print()

{

cout <<m_a <<m_b<<endl;

}

private:

int m_a;

int m_b;

};

int main()

{

MYINT a(123456, 7890123);

a.Print();

return 0;

}[/mw_shl_code]

运行结果:

[mw_shl_code=cpp,true]1234567890123[/mw_shl_code]

以上就是非常重要的一个概念, 类.

在以后可以看到string类型, list类, vector类等等等等.....

以及视图的窗口类, 菜单类,

以上为2013.1.13更新部分.

[查看全文]