There are compelling reasons to combine the concepts of an architecture description language with those of an object-oriented framework to provide support for the development of reusable and extensible software architectures. This paper presents C++CL, an object-oriented framework for developing reconfigurable distributed software architectures, which follows that approach. The reconfigurability of C++CL enables us to develop distributed systems, which require changes to take place during run time without having to shut the system down. Examples of systems of this kind are evident in banking, industrial control and telecommunications and are becoming more common in many other areas. The main focus of the paper is to show how C++CL supports re-usability and the evolution of distributed systems through the use of inheritance and the modelling of architectural styles. Inheritance can be applied not only to the components of an architecture but to the description of the architectural configuration itself. An architectural style, similarly to a pattern, defines an architecture-based solution to a family of problems. The combination of those two concepts provides powerful support for re-usability of architecture descriptions.