c#跟c++的相似之处

c#2.0里的所谓“新特性”相当部分 其实在c++里早就有了,而
且是很多年前就有了 我们被微软忽悠了。
 
先说全局标识符“::”
在c++中你可以这样写你的代码:

1 void CDialogDlg::Onsave()
2 {
3 }

看不明白??
就是说这里的Onsave方法是 CDialogDlg这个类下面的
然后再说泛型,泛型可以说是c#2.0新增的又一大有用的特性。
你可以在c/c++中这样写你的代码
定义:

1 template<class T>
2 T function1(T a)
3 {
4 return a;
5 }

调用:

1 printf( function1("fghh"));

相信很少有人在c++中写过这样的代码,但实际上他是可行的
在c++中他叫template
刚刚上面那个函数 如果你要打印一个整数可以这样调用

1 printf("%d", function1(1234));

是不是很神奇 ^_^
c++里也可以写这样的代码:

1 # include <iostream>
2  usingnamespace std;
3  

哇哈哈 同学们是不是感觉很熟悉
是的没错 c#里要引入一个命名空间就是这样写的
说到BOOL类型 我们想到的是什么 TRUE FALSE?
它的实质是什么?
看下c++里的源码

1 #define FALSE 0
2  #define TRUE 1

他是系统定义的两个常量,或者说是标识
就是说BOOL型的变量实质是一个枚举类型,而这个枚举只有两
种状态TRUE跟FALSE
String 相信在c#里也经常用吧,只要是编程就离不了它
你见过c++里有String 类型的的变量吗,没有的.
c++里用这个"CString" 他是被封装成的一个class
说到底他是一个引用类型(String类型它的内存地址分配了就不
能再改他的内容 如果要连接100个字符串那么他就要分配100个
内存地址) 不能向整数那样直接用“+”的方式
否则它的效率是很低的
这就是为什么要用StringBuilder的原因,但是有初学者不知道
当初我就不知道^_^
c++里的访问标识符可以这样写:

1 public:
2 int a;
3 float b;


c++里实例化一个对象 然后调用它的方法:

1 Class1 *p1;
2 Class1 t(5);
3 p1 =&t;
4 printf("%d" ,p2->aa);

看不懂?? 
这样呢:

1 Class1 *p1;
2 p1=new Class1(5);

经常在c#里写这样的东西 不明其所以然 只知道可以用,
其实就是指针而已
当初比较笨 c语言讲指针数组 什么数组指针那章晕了好半天呢
^_^

 

c#3.0里的 “扩展方法” 抄袭c++里的 “友元函数” 一个概念 只不过换了个名字

c#2.0里不是有个叫“矢代器”的东东吗  这不就是c++ stl里vector 的矢代器一样的概念么

 

看得出c# 。net一直在改进 微软正努力让他变得更好用

 

为什么?实际上这些所谓的高级语言 一直在抄袭低级语言

 

说到底 不要过分去研究那些时髦的东西,老的技术总是有用处
的。电脑不可能智能到 不需要任何人工干预的情况下给你写出
一个有用的程序来的。
现在软件行业人越来越多 各种开发工具越来越智能化 写Hello 
world越来越简单 我都有点担心饭碗问题了 T_T

去年把c++ premier plus 读了一遍。

总结一下吧。

严格上说的C++只是一种语法规范 和开放的编译标准,属于众人拾柴火焰高的类型。你可以选择各家的编译器

但实际情况下却是比较难用,开发比较大的没见过的功能算法要到处找库来 沾到一起。C++仅仅是语法规范 注意仅仅

如果涉及到多线程,文件操作,网络socket ,绘图,都需要学习跟特定操作系统相关的接口 Windows Linux各不一样。

微软还是有他的牛逼之处 众人拾柴火焰高的感觉像是开源的C++用的人是多 但是依然那么难用,不像C#可形成体系的一套解决方案。

C++印象比较深刻的是 直接内存操作 以及“值类型”和“引用类型” 界限的模糊,这点既是比较灵活 运行起来效率高 也是比较hold不住的地方。

c#值类型和引用类型有清晰的界限 不用管new出来的引用。

不过学了它后却是对c#的应用 以及其他上层语言 的运作过程有了个更深刻的理解。

posted @ 2010-08-07 00:11  assassinx  阅读(630)  评论(0编辑  收藏  举报