最近学了C#,以前在单位用的是c/c++.由于客户的程序是C#写的,所以顺便学习了一下。
从这次的程序中学到的东西:
对面向对象编程的概念有了更深入的了解,以前在单位都是api/win32编程,很少用到面向对象的编程,一般都是面向过程编程.
我记得的几个关键字:
1.封装
封装就是数据数据的集合,体现在结构或者类里面
封装可以隐藏实现细节,使得代码模块化.
2.继承
主要目的是为了便于移植程序以及使整个程序更加清楚.
扩展已存在的代码类,使得代码可以重新使用。
3.多态
多重形态,一般指子类继承父类时现实出不同的形态.
子类和可以重写父类中的虚函数。
多态是为了接口重新使用。
1.早绑定
就是重载的时候函数名称和地址早已由编译器搞定 类似
str_func 和int_func 虽然表面上两个函数的名称相同,但参数一个是int,一个是string.
其实对于编译器来说两个函数名称是不同的。函数的绑定在编译期间确定。
2.晚绑定
晚绑定其实就是指对于编译器来说名称是相同的,因为覆盖/重写的时候不仅函数的名称相同,
而且连函数的参数也相同。唯一不同的就是函数的内容。
4.重载/覆盖(重写)
重载和覆盖最大差别是参数不同(个数,顺序,类型),
覆盖即重写,是针对于函数内容来说的,其它方面均不能改变。只是函数的内容变了。
重载的不仅函数内容改变了,连函数参数也变化了。
两者的相同之处就是函数的名称相同!
5.虚函数
在基类/父类里面被声明,在子类中被重新定义的成员函数。
virtual void funA(){};
* 必须是非静态函数
使用的时候: 基类 CBase cb, CCh1 cc1, CCh2 cc2
cb=cc1;
cb=cc2;
基类指针指向派生类指针能够访问在派生类中被重新定义的虚函数。
纯虚函数:
6:this 指针