c#跟c++的相似之处
c#2.0里的所谓“新特性”相当部分 其实在c++里早就有了,而
且是很多年前就有了 我们被微软忽悠了。
先说全局标识符“::”
在c++中你可以这样写你的代码:
2 {
3 }
看不明白??
就是说这里的Onsave方法是 CDialogDlg这个类下面的
然后再说泛型,泛型可以说是c#2.0新增的又一大有用的特性。
你可以在c/c++中这样写你的代码
定义:
2 T function1(T a)
3 {
4 return a;
5 }
调用:
相信很少有人在c++中写过这样的代码,但实际上他是可行的
在c++中他叫template
刚刚上面那个函数 如果你要打印一个整数可以这样调用
是不是很神奇 ^_^
c++里也可以写这样的代码:
2 usingnamespace std;
3
哇哈哈 同学们是不是感觉很熟悉
是的没错 c#里要引入一个命名空间就是这样写的
说到BOOL类型 我们想到的是什么 TRUE FALSE?
它的实质是什么?
看下c++里的源码
2 #define TRUE 1
他是系统定义的两个常量,或者说是标识
就是说BOOL型的变量实质是一个枚举类型,而这个枚举只有两
种状态TRUE跟FALSE
String 相信在c#里也经常用吧,只要是编程就离不了它
你见过c++里有String 类型的的变量吗,没有的.
c++里用这个"CString" 他是被封装成的一个class
说到底他是一个引用类型(String类型它的内存地址分配了就不
能再改他的内容 如果要连接100个字符串那么他就要分配100个
内存地址) 不能向整数那样直接用“+”的方式
否则它的效率是很低的
这就是为什么要用StringBuilder的原因,但是有初学者不知道
当初我就不知道^_^
c++里的访问标识符可以这样写:
2 int a;
3 float b;
c++里实例化一个对象 然后调用它的方法:
2 Class1 t(5);
3 p1 =&t;
4 printf("%d" ,p2->aa);
看不懂??
这样呢:
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#的应用 以及其他上层语言 的运作过程有了个更深刻的理解。