之前是学 C, 后面是用 Java 做安卓开发,现在又有机会来看一下 MFC,但是就对于其中一些概念并不是很明白,或者是因为我并没有完整的看过一些书籍的问题。特别是 MFC 对于 Win32 的封装,看起来有一些很古怪的地方。

关于Cpp的声明与定义 一文中说到,对于 Cpp 来说,所有要使用的符号(变量,类,对象)以后,都是要先声明然后才可以使用的,声明可以有多处,但是定义只能有一处。所以,通常来说都会将声明放在 .h 文件中,而将实现放在 .cpp 文件中。这只是一个约定的行为而已。

但事实上,对于编译器本身而言,他们对文件是什么扩展名,是不做任何假设。之所以能够将 .h 中的文件进行引入,是因为 #includer 语句的原因而不是其他。

但我就发觉了一个非常不好的习惯,或者只是因为我习惯了 Java 所以不习惯 Cpp 而已么?

一个文件中定义多个类

这个经常能够看到,比如像 VS 还提供了一个叫做 类视图 的东西,在这里看到的东西,和在 解决方案视图,也就是文件视图里面看到的东西是完全不一样的,为什么不将每个类单独定义在一个地方呢?

更有甚者,在一个文件中定义多个类,定义多个变量,将类的定义和与其他非类的,比如说函数的定义放在一起,这是为什么呢?

在类中调用非类的函数

这才是纳闷的地方。特别是 MFC,在类对象代码内部到处都是调用 API 函数的地方,比如,可以调用 C 的 标准库函数这样。而用 std::print 这样的函数我还好理解一些呢?

还有什么?

最终

看多很多地方都会说到一个问题,也不是我第一个有这个疑问。因为 Cpp 并不是一种纯对象的语言,其支持面向对象、面向过程、基于对象的变成,所以就不难理解这些了。

这里有个基于对象的说法是:将数据和操作封装在对象中,但是并没有合理的使用多态,继承等面向技术,其实大多数时候我写 Java 也是这样的了