本文主要是介绍Bjarne Stroustrup谈C++,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
摘要
作为C++发明人,*Bjarne Stroupstrup*在个人网站上谈了不少对C++的思考。详细阅读,摘录部分如下。
-
What is C++
C++ is a general-purpose programming language with a bias towards systems programming that
- is a better C
- supports data abstraction
- supports object-oriented programming
- supports generic programming
Or, in other words: C++ is a language for defining and using light-weight abstractions. It has significant strengths in areas where hardware must be handled effectively and there are significant complexity to cope with.
C++ supports data abstraction, which means classes. Classes are there to help you organize your code and helps to mainternace.
A class is the representation of an idea, a concept, in the code.
An object of a class represents a paeticular example of the idea in the code.
A well-designed class presents a clean and simple interface to its users, hiding its representation and saving its users from having to know about that representation.
When designing a class, it is often useful to consider what’s true for every object of the class and at all times. Such a property is called an invariant.
The object-oriented programming is a style of programming originating with Simula (more than 40 years ago!) relying of encapsulation, inheritance, and polymorphism. In the context of C++ (and many other languages with their roots in Simula), it means programming using class hierarchies and virtual funcitons to allow manipulation of objects of a variety of types through well-defined interfaces and to allow a program to be extended incrementally through derivation.
The point about arranging classes into a class hierarchy is to express hierarchical relationships among classes and use those relationships to simplify code.
Object-oriented programming is not a panacea. “OOP” does not simply mean “good” - if there are no inherent hierarchical relationships among the fundamentabl concepts in your problem then no amount of hierarchy and virtual functions will improve your code. The strength of OOP is that there are many problems that can be usefully expressed using class hierarchies - the main wekness of OOP is that too many people try to force too many problems into a hierarchical mould. Not every program should be object-oriented. As alternatives, consider plain classes, generic programming, and free-standing functions (as in math, C, and Fortran).
generic programming
Generic programming is programming based on parameterization: you can parameterize a type with another (such as a vector with its element types) and an algorithm with another (such as a sort function with a comparion function). The aim of generic programming is to generalize a useful algotithm or data strcture to its most general and useful form. For example, a vector of integers is fine and so is a function that finds the largest value in a vector of integers.
Generic programming is in some ways more flexible than object-oriented programming. In particular, it does not depend on hierarchies. For example, there is no hierarchical relationship between an int and a string. Generic programming is generally more structured than OOP; in fact, a common term used to describe generic programming is “parametric polymorphism”, with “ad hoc polymorphism” being the corresponding term for object-oriented programming.
No. Learn C++ first. The C subset of C++ is easier to learn for C/C++ novices and easier to use than C itself. The reason is that C++ provides better guarantees that C (stronger type checking). In addition, C++ provides many minor features, such as the ‘new’ operator, that are notationally more convenient and less error-prone than their C alternatives. Thus, if you plan to learn C and C++ (or just C++) you shouldn’t take the detour through C. To use C well, you need to know tricks and techniques that aren’t anywhere near as important or common in C++ as they are in C. Good C textbooks tends (reasonably enough) to emphasize the techniques that you will need for completing major projects in C. Good C++ textbooks, on the other hand, emphasizes techniques and features that lead to the use of C++ for data abstraction and object-oriented programming. Knowing the C++ constructs, their (lower-level) C alternatives are trivially learned (if necessary).
I wanted to write efficient systems programs in the styles encouraged by Simula67
. To do that, I added facilities for better type checking, data abstraction, and object-oriented programming to C. The more general aim was to design a language in which I could write programs that were both efficient and elegant.
这篇关于Bjarne Stroustrup谈C++的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!