本帖最后由 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++类型的类比, 介绍基本类型和自定义类型.
本帖最后由 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更新部分.
[查看全文]