或许是基于一直以来 c/c++ 头文件声明和 cXX 实现物理上置于独立文件的考虑,c++ 中的 OO 在现实中基本上也是按照声明和实现分离的方式进行管理和编译,如下所示:
Base.h
- #pragma once
- class Base
- {
- public:
- int i; //仅为了测试方便
- Base(void);
- ~Base(void);
- virtual void testDynCast();
- };
Base.cpp
- #include "stdafx.h"
- #include "Base.h"
- #include
- using namespace std;
- Base::Base(void)
- {
- }
- Base::~Base(void)
- {
- }
- void Base::testDynCast() {
- cout << i << endl;
- }
分发给客户的时候,我们只要提供 Base.h 和 Base.cpp 编译后的 so 或者 a 即可。如下:
- #include "Base.h"
- int _tmain(int argc, _TCHAR* argv[])
- {
- Derived derived = Derived();
- derived.i = 100;
- derived.testDynCast();
- Base* dp1 = &derived;
- }
相较于于 java 的 interface/class,惯例上,一般我们在 interface 只包含接口,不会包含 pojo 或者属性(虽然 interface 也可以包含属性,但要求必须是 final 的)。对于精心设计的系统而言,c++ 的声明、定义分离方式,对于客户而言,服务和对应的领域对象组织在一起,个人觉得使用 / 维护起来更加的自然,对于 java,单独维护在 package 中,总觉得看起来有些硬凑的感觉。
来源: