透析C++代码实现ControlTemplate

开发 后端
如果要把C++代码中的诸多不必要的复杂性去掉,留下那些本质的,重要的语法特性,简化编制技巧,这样会大大的提高开发人员的工作效率。

现在主流的开发语言就是C++语言了,但是不过感觉没有C语言实现的那么灵活,现介绍一下代码实现 ControlTemplate的方法,希望大家学习探讨,好了下面就是C++代码举例说明:

  1. FrameworkElementFactory fe = new FrameworkElementFactory(typeof(Image), "Image");   
  2.  
  3.            BitmapImage bi = new BitmapImage();   
  4.            bi.BeginInit();   
  5.            bi.UriSource = new Uri(@"E:ChartControlHanYangChartControlImageMainBackground.jpg");   
  6.            bi.EndInit();   
  7.  
  8.            fe.SetValue(Image.SourceProperty, bi);   
  9.  
  10.            //控件呈现的显示内容2(这里为TextBox)   
  11.            FrameworkElementFactory fe2 = new FrameworkElementFactory(typeof(TextBox), "TextBox");   
  12.            fe2.SetValue(TextBox.WidthProperty,100.0);   
  13.            fe2.SetValue(TextBox.HeightProperty, 100.0);   
  14.  
  15.            //把要呈现的显示内容封装起来   
  16.            FrameworkElementFactory f = new FrameworkElementFactory(typeof(Grid), "Grid");   
  17.            f.AppendChild(fe);   
  18.            f.AppendChild(fe2);  

从上表可以看出,int与long相同。那么,为什么C++代码还要区分这两种数据类型呢?实际上这是个遗留问题。在16位编程环境中,int要求2个字节而long要求4个字节。而在32位编程环境中,这两种数据都用4个字节存放。

C++Builder只生成32位程序,所以int与long相同。说明 在C++ Builder和BorLand C++ 5.0中,Bool是个真正的数据类型。有些C++编译器有Bool关键字,则Bool不是个真正的数据类型。

有时Bool只是个typedef,使Bool等价于int。typedef实际上建立别名,使编译器在一个符号与另一符号间划上等号。typedef的语法如下:typedef int Bool;这就告诉编译器:Bool是int的别名。说明 只有double和float数据类型使用浮点数(带小数点的数)。

其它数据类型只涉及整数值。尽管integer数据类型也可以指定带小数点的数值,但小数部分会舍弃,只将整数部分赋予整型变量。例如:int x=3.75;得到的x取值为3。注意,这个整数值并不是四舍五入,而是放弃小数部分。顺便说一句,大多数Windows程序很少用到浮点数。

C++代码可以在必要时进行不同数据类型间的换算。例如:short result;long num1 = 200;long num2 = 200;result = num1 * num2;这里我想将两个长整型的积赋予一个短整型。尽管这个公式混用了两种数据类型,但C++能够进行换算。计算结果会怎样呢?结果会让你大吃一惊,是25536,这是绕接(wrop)的结果。

从表1.1可以看出,短整型的***取值为32767,在***值之上加1会怎么样呢?得到的是32768。这实际上与汽车里程计从99999回到00000的道理一样。为了说明这点,请输入并运行下列清单1.3中包含的程序。

为了避开C++的复杂性而干脆不用C++(Linus的做法),无异于因噎废食。”在所有可用C和C++的领域,C++都是比C更好的语言。当我说“更好的”时候,我说的是C++拥有比C更安全的类型检查、更好的抽象机制、更优秀的库。

当然,凡事都有例外,如果你做的项目1)不大。2)编码中用不到什么抽象机制,甚至ADT(抽象数据类型,例如std::complex这种不含多态和继承的)也用不到,RAII也用不到,异常也用不到。

3)你连基础库(如,简化资源管理的智能指针、智能容器)都用不着。那么也许你用C的确没问题;所以如果你的情况如此,不用和我争论,因为我无法反驳你。我们这里说的领域大致是Bjarne在“C++应用列表”里面列出来的那些地方。 #t#

即便是C++的反对者也许也很难找到理由说“我还是不用C++代码”。在我看来,一个真正从实践意义上理性反对使用C++的人只有一个理由:C++的复杂性带来的混乱抵消乃至超过了C++的抽象机制和库(在他的特定项目中)带来的好处。

值得注意的是,这里需要避免一个陷阱,就是一旦人们认定了“C++代码不好”,那么这个理由就会“长出自己的脚来”,即,就算我们拿掉C++的复杂性,他们可能也会坚持还是不用C++,并为之找一堆理由。

我假定你不是这样的人。不过,也许最可能的是他会说:“问题是我们今天用的C++并非如此(简洁),你的假设不成立。”是的,我的假设不成立。但虽然我们无法消除复杂性,我们实际上是可以容易地避开复杂性,避短扬长的。这也是本文的要点,容我后面再详述。

责任编辑:chenqingxiang 来源: 网易科技
相关推荐

2009-08-20 14:22:17

C#实现 Contro

2010-01-28 13:45:06

C++数组

2010-01-19 14:28:41

C++ main()函

2010-01-18 09:39:25

C++语言

2010-01-18 17:48:46

C++类对象

2010-01-20 14:13:33

C++变量

2010-01-21 10:04:14

C++语言

2023-10-30 10:29:50

C++最小二乘法

2023-12-22 13:58:00

C++链表开发

2010-02-06 09:46:46

C++单向链表

2009-08-28 09:43:05

C#事件

2010-02-06 13:42:36

C++单件模式

2020-06-16 16:25:05

C++JavaPython

2011-05-18 18:05:47

C#C++

2010-01-18 16:17:53

C++代码

2010-01-14 14:40:21

C++代码

2010-02-01 13:34:07

C++获得系统时间

2011-05-18 17:56:38

C#C++

2010-01-21 10:23:53

C++代码

2010-03-17 19:06:59

Java join线程
点赞
收藏

51CTO技术栈公众号