Why should I learn c++?
The C++ language is the bedrock of modern computing - it underlies your operating
system, and it's the language in which other languages are written. The majority
of applications the higher level languages that are themselves written in C++ are
going to be more efficient. And it's also the language in which many commercial
applications are coded. Having a strong foundation in C++ will help you immeasurably.
Perhaps some looking at a PHP script or a piece of Python and saying "C++ isn't
important to me". Actually, it is important. Your PHP and your Python and many
other languages are written in C++.
How fast can one learn C++?
I'd say at least a month. Once you learn the basics the rest can be figured out
from help files. But to learn C++ for say basic programmers is a challenge. Let
quit all this gibberish and get to the heart of this page. With all your dedication,
I say you can even learn C++ programming in 3 days. Well at least the basics that
will help you to build more powerful programs. Well let's test that...
Which should I learn first C or C++?
C is a much simpler language, and it is possible to get your brain completely wrapped
around it very quickly. If you have little or no programming experience, be prepared
to face a real challenge if not learning C first. If you do decide to learn C++,
then there is no point in learning C itself first.
Is C++ in decline?
No, I don't think so. C++ use appears to be declining in some areas and to be on
an upswing in others.
Can I learn C++?
This site is for everybody: students, hobbyist programmers, and also for people
who always thought programming was a tough task. It’s for people who had ideas like:
I wish I could build a tool to store all my recipes, I wish I could print them and
send them to my friends OR I wish I could build this cool card game that I have
never found elsewhere OR I wish I could build this cool software to store my DVD
and CD collection OR I wish I could build this software to help me work with matrices
and plot graphics for my math class and many more projects that one can think of!
This site is for people who have ideas but don’t know how to bring them to reality.
It’s a good introduction to this art and science that is developing software. For
Beginners -- And Anyone Who Wants to Learn Something New. This site is primarily
designed for people who have never programmed before. However, practitioners and
advanced students will gain new insight and guidance.
[1.1] What is a class?
The fundamental building block of OO software.
A class defines a data type, much like a struct would be in C. In a computer science
sense, a type consists of both a set of states and a set of operations which transition
between those states. Thus int is a type because it has both a set of states and
it has operations like i + j or i++, etc. In exactly the same way, a class provides
a set of (usually public) operations, and a set of (usually non-public) data bits
representing the abstract values that instances of the type can have.
You can imagine that int is a class that has member functions called operator++,
etc. (int isn't really a class, but the basic analogy is this: a class is a type,
much like int is a type.)
Note: a C programmer can think of a class as a C struct whose members default to
private. But if that's all you think of a class, then you probably need to experience
a personal paradigm shift.
[1.2] What is an object?
A region of storage with associated semantics.
After the declaration int i; we say that "i is an object of type int."
In OO/C++, "object" usually means "an instance of a class."
Thus a class defines the behavior of possibly many objects (instances).
[1.3] When is an interface "good"?
When it provides a simplified view of a chunk of software, and it is expressed in
the vocabulary of a user (where a "chunk" is normally a class or a tight
group of classes, and a "user" is another developer rather than the ultimate
customer).
• The "simplified view" means unnecessary details are intentionally hidden.
This reduces the user's defect-rate.
• The "vocabulary of users" means users don't need to learn a new set
of words and concepts. This reduces the user's learning curve.
[1.4] What is encapsulation?
Preventing unauthorized access to some piece of information or functionality.
The key money-saving insight is to separate the volatile part of some chunk of software
from the stable part. Encapsulation puts a firewall around the chunk, which prevents
other chunks from accessing the volatile parts; other chunks can only access the
stable parts. This prevents the other chunks from breaking if (when!) the volatile
parts are changed. In context of OO software, a "chunk" is normally a
class or a tight group of classes.
The "volatile parts" are the implementation details. If the chunk is a
single class, the volatile part is normally encapsulated using the private and/or
protected keywords. If the chunk is a tight group of classes, encapsulation can
be used to deny access to entire classes in that group. Inheritance can also be
used as a form of encapsulation.
The "stable parts" are the interfaces. A good interface provides a simplified
view in the vocabulary of a user, and is designed from the outside-in (here a "user"
means another developer, not the end-user who buys the completed application). If
the chunk is a single class, the interface is simply the class's public member functions
and friend functions. If the chunk is a tight group of classes, the interface can
include several of the classes in the chunk.
Designing a clean interface and separating that interface from its implementation
merely allows users to use the interface. But encapsulating (putting "in a
capsule") the implementation forces users to use the interface.
[1.5] How does C++ help with the tradeoff of safety vs. usability?
In C, encapsulation was accomplished by making things static in a compilation unit
or module. This prevented another module from accessing the static stuff. (By the
way, static data at file-scope is now deprecated in C++: don't do that.)
Unfortunately this approach doesn't support multiple instances of the data, since
there is no direct support for making multiple instances of a module's static data.
If multiple instances were needed in C, programmers typically used a struct. But
unfortunately C structs don't support encapsulation. This exacerbates the tradeoff
between safety (information hiding) and usability (multiple instances).
In C++, you can have both multiple instances and encapsulation via a class. The
public part of a class contains the class's interface, which normally consists of
the class's public member functions and its friend functions. The private and/or
protected parts of a class contain the class's implementation, which is typically
where the data lives.
The end result is like an "encapsulated struct." This reduces the tradeoff
between safety (information hiding) and usability (multiple instances).
[1.6] How can I prevent other programmers from violating encapsulation by seeing
the private parts of my class?
Not worth the effort — encapsulation is for code, not people.
It doesn't violate encapsulation for a programmer to see the private and/or protected
parts of your class, so long as they don't write code that somehow depends on what
they saw. In other words, encapsulation doesn't prevent people from knowing about
the inside of a class; it prevents the code they write from becoming dependent on
the insides of the class. Your company doesn't have to pay a "maintenance cost"
to maintain the gray matter between your ears; but it does have to pay a maintenance
cost to maintain the code that comes out of your finger tips. What you know as a
person doesn't increase maintenance cost, provided the code you write depends on
the interface rather than the implementation.
Besides, this is rarely if ever a problem. I don't know any programmers who have
intentionally tried to access the private parts of a class. "My recommendation
in such cases would be to change the programmer, not the code" [James Kanze;
used with permission].
[1.7] Is Encapsulation a Security device?
No.
Encapsulation != security.
Encapsulation prevents mistakes, not espionage.
[1.8] What's the difference between the keywords struct and class?
The members and base classes of a struct are public by default, while in class,
they default to private. Note: you should make your base classes explicitly public,
private, or protected, rather than relying on the defaults.
struct and class are otherwise functionally equivalent.
OK, enough of that squeaky clean techno talk. Emotionally, most developers make
a strong distinction between a class and a struct. A struct simply feels like an
open pile of bits with very little in the way of encapsulation or functionality.
A class feels like a living and responsible member of society with intelligent services,
a strong encapsulation barrier, and a well defined interface. Since that's the connotation
most people already have, you should probably use the struct keyword if you have
a class that has very few methods and has public data (such things do exist in well
designed systems!), but otherwise you should probably use the class keyword.