C++ Primer (5th Edition)

Category: Programming
Author: Stanley B. Lippman, Josée Lajoie, Barbara E. Moo
4.3
All Stack Overflow 8
This Year Stack Overflow 2
This Month Stack Overflow 2

Comments

by anonymous   2019-07-21

It appears you think you are declaring "equations" when you are actually declaring variables. You write:

double numeratorFactorial  = (pow(M_E,-characterSymbols))
                            *(pow(characterSymbols,characterSymbols))
                            *(sqrt(2*M_PI*characterSymbols));

But characterSymbols isn't defined, only "declared". characterSymbols is declared above it, but it doesn't have a value... yet. Later on you use cin to get a value into it, but when you first declare numeratorFactorial you can't simply expect the program to insert the value into numeratorFactorial when characterSymbols changes.

Some definitions are probably in order: The statement double numeratorFactorial = some_value; creates a variable named numeratorFactorial and uses some_value to fill that variable immediately. What you want is a function, a logical statement that you can "pass values" to so values are generated when you need them. For example, for your numerator factorial:

double numeratorFactorial(double characterSymbols) {
    return  (pow(M_E,-characterSymbols))
           *(pow(characterSymbols,characterSymbols))
           *(sqrt(2*M_PI*characterSymbols));
}

int main() {
    std::cout << "Numerator Factorial test: " << numeratorFactorial(5.0) << std::endl;
}

Note that you cannot declare a function within the main function.

This sort of thing is programming fundamentals, and it seems like you are trying to run before you've learned to walk. Get a good book like C++ Primer and pace yourself.

by anonymous   2019-07-21

Congratulations on taking the plunge to learn C++, as you gain experience, it will open your mind to a whole new way of thinking.

For a C++ beginner there are several hints which can help you get on your way. C++ is an object-orientated language. There are general agreed upon sets of principles and best practices that apply to all object-oriented languages. For your example it might seem unnecessary, but as your projects grow in size, scope, and complexity, especially if you want to create a real game, certain practices and ways of thinking are a must.

Your question deals with one of core principles of object-orientated software design.

The struct and class keywords in C++ exist for the purpose of encapsulation into objects. It is generally a good practice to group related behaviour and related data into reasonably-sized classes or structs of source code.

C++ programmers will typically place object definitions in the .hpp or .h header file. This is where you define the structure of an object, and declare member variables and functions. Then where you use the object, in your case your main() function, you would include the definition of your object with #include "YourClass.hpp".

The other file extension you will commonly see is the .cpp which is where the object implementation lives. In order to implement the behaviour of your object, you need to tell the compiler to include the object's header with #include "YourClass.hpp" at the top of your .cpp file.

This practice is called separating definition from implementation. You will find this process improves readability, and also improves compilation, because this is how the language is designed to be used.

Summary:

Define your object in the definition header file .hpp

Implement your objects behaviour in the implementation file .cpp

Bold:

Here is a rough skeleton of a class or struct that follows this.

// -- your 'MyClass.hpp' file

class MyClass
{

private:

    // private member variables go here ( invisible from outside )

    float bar;

    int foo;

public:

    // these are your public member functions

    // the first two functions are the constructor and destructor
    // they get called when the object is created and destroyed
    // respectively

    MyClass();
    ~MyClass();

    // other member functions go here

    int fooFunction( float someArg );

    // ...etc

private:

    // private member functions go here

    void someOtherFunction();

    // ...etc

}

Then your .cpp implementation file looks like this.

// -- your 'MyClass.cpp' file --


#include "MyClass.hpp"

// constructor function implementation
MyClass::MyClass()
{

    // put code that happens when the object is created

    foo = 12.0f;

    std::cout << "Object 'MyClass' created!" << std::endl;

}

// destructor function implementation
MyClass::~MyClass()
{

    // put code that happens when the object is destroyed

    std::cout << "Object 'MyClass' destroyed!" << std::endl;

}

int MyClass::fooFunction( float someArg )
{

    foo = someArg;

}

void MyClass::someOtherFunction()
{

    // do something

}

I realize you just started learning C++, but my advice to you would be to first pick up a few good introductory books on C++. I really like C++ Primer 5th Edition. Then you should familiarize yourself with general OPP coding practices.

When you feel comfortable with thinking in patterns and are serious about game development, take a look at Game Engine Architecture, 2nd and [Game Coding Complete, 4th][3].

It will save you a lot of time and headache by taking a methodical approach to learning programming and C++ in general. The internet is full of many great resources for people like you. Good luck!

by anonymous   2019-07-21

Advice: read a good C++ book that explains the basics. C++ Primer 5th edition is an example.

Your syntax for the array parameters is incorrect: you're missing the type of the array elements in the declaration, and you're missing both the element type and the "array syntax" in the definition.

Additionally, you have a return type mismatch between the definition and the declaration.

void postCodeCompare(char tempPostCode[], char theRoutingArray[], char theIdentifier[]);

...

inline int PostCode :: postCodeCompare(
    char tempPostCode[], char theRoutingArray[], char theIdentifier[]){ /*...*/ }
by bra-ket   2019-07-12
C++ primer from Lippman is the sanest https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/03217...
by anonymous   2018-07-19
Go read [C++ Primer](https://www.amazon.com/dp/0321714113). Here: https://pastebin.com/raw/cfSknXJ7
by gusmd   2018-04-04
If you are willing to read a book, I strongly recommend the C++ Primer, 5th ed., by Lipmann et al. [0]

It's a very didactic book, covering C++11 well. Unfortunately it does not cover C++14 or C++17, but if you are just starting out with C++ I don't think that's an issue -- most shops are still on 11 or older, anyways...

[0] https://www.amazon.com/dp/0321714113

by tolger   2018-03-10
I found "C++ Primer" by Lippman et al very well written and comprehensive. It includes C++11 features and every chapter has exercises to make sure you understand the content.

https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/03217...

by anonymous   2018-01-29
Not all professors do, unfortunately. Last week I interviewed a potential hire with a masters degree. When asked "What is the Rule of three?" he tried to invent something magical. That said, writing your own `vector` is not stuff you should be learning in the first week of C++. You aren't coming into programming fresh, so may I recommend supplementing your course materials with the [C++ Primer](https://www.amazon.com/Primer-5th-Stanley-B-Lippman/dp/0321714113/)? It takes a bit of time getting you up to speed on the syntax and ideologies before throwing you off the deep end.
by anonymous   2018-01-22
Is the book perhaps [C++ Primer *Plus*](https://www.amazon.com/dp/0672326973/?tag=stackoverflow17-20) by Stephen Prata? Then you *should* throw it away! See e.g. [this review](https://accu.org/index.php?module=bookreviews&func=search&rid=1744) for a few reasons why. [C++ Primer](https://www.amazon.com/dp/0321714113/?tag=stackoverflow17-20) by Stanley B. Lippman et. al. on the other hand is an *excellent* beginners book. Also see [here for a list of good beginners (and other) books](https://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list/388282#388282).
by anonymous   2017-08-20

There are a lot of ways in C++ to achieve selection structure.

  1. if else (basically every programming language have it)


if (a)
{
    //do something
}
else 
{
    //do something else
}
  1. switch control


switch (input)
{
case a:
     // do something
     break;
case b:
     // do something else
     break;
default:
     // default when the user input is not expected a or b
}
  1. labels and goto keyword


int main(void)
{
    //something....
    if (a) goto label_a;
    else if (b) goto label_b;
label_a:
    //something...
    goto end;
label_b:
    //something else
    goto end;
end:    
    return 0;
}
  1. Function calls


void first() { /*something*/ }
void second() { /*something else*/ }

int main(void)
{
    //your previous codes
    if (a) 
    {
        first();
    }
    else
    {
        if (b)
        {
            second();
        }
    }

    return 0;
}


More things to read: CPlusPlus Statements and Controls
Or you can invest some money to buy a good C++ Reference books like C++ Primer

by anonymous   2017-08-20

Welcome to SO.

You have really bundled two or three question together here, but lets have a go at it:

As a third component I need some kind of controlling which links the application's logic with its GUI.

Since you are using Qt, you have a built in answer to this question:

Qt Project-Model/View Programming. To get you started:

The model/view architecture

Model-View-Controller (MVC) is a design pattern originating from Smalltalk that is often used when building user interfaces. In Design Patterns, Gamma et al. write:

MVC consists of three kinds of objects. The Model is the application object, the View is its screen presentation, and the Controller defines the way the user interface reacts to user input. Before MVC, user interface designs tended to lump these objects together. MVC decouples them to increase flexibility and reuse.

If the view and the controller objects are combined, the result is the model/view architecture. This still separates the way that data is stored from the way that it is presented to the user, but provides a simpler framework based on the same principles. This separation makes it possible to display the same data in several different views, and to implement new types of views, without changing the underlying data structures. To allow flexible handling of user input, we introduce the concept of the delegate. The advantage of having a delegate in this framework is that it allows the way items of data are rendered and edited to be customized.

The MVC model, explicitly supported by the QT framework (and possible to implement with other GUI frameworks as well, albeit with more work), is widely accepted as a robust, flexible group of design patterns that affords management and separation of the various application layers, in the manner you are thinking about - so you are on the right track.

The second point may sound a little bit weird, I admit; to put it short, my aims are...

The question of how to set up your source code projects really has nothing to do with your application architecture per se, although these areas generally do intersect such that good project organization facilitates easier implementation of your architecture, and vice- versa. How you organize your project and its various libraries and classes may depend not only the project you're working on now, but on plans for future projects. For example, as you mentioned, you may want to design certain GUI components that you can use for several different applications. If so, you may want to put your GUI modules into a separate reusable generic library that can be used by many applications.

Certain rules, however are applicable across the board and are followed by most experienced developers - here are a few big ones, there are many more:

  • One major class and its friend classes per unit (hpp/cpp file).

  • Be very careful about what you include in header files and what you leave to your CPP files. You will find guidelines here on SO and in any good C++ book on this subject, which is quite important, particularly in complex projects. (From the sound of it - for example your questions about how to use #include and "connect the parts "in code - you need to get a better grasp of the some the fundamentals of C++ programming. Some excellent books are out there - you can find lists on here. C++ Primer (5th Edition) is one of the best places to start.)

  • Break down your classes and libraries in terms of their functionality. Most IDES support virtual sub-folders in your project (not sure about Code::Blocks) to help keep things organized in such manner. This actually gets into fundamental design questions, not merely how to lay out the code in your project.

  • Avoid tight coupling!

    In software engineering, coupling or dependency is the degree to which each program module relies on each one of the other modules.

    Coupling is usually contrasted with cohesion. Low coupling often correlates with high cohesion, and vice versa. Low coupling is often a sign of a well-structured computer system and a good design, and when combined with high cohesion, supports the general goals of high readability and maintainability.

  • Make good use of namespaces, another great language feature that helps keep things modularized and organized.

In your case it seems that you might want to to do is package your "application logic" into one library, your generic GUI modules into a second, and then a third, thin executable -perhaps simply containing main() and a few lines to kick things off and shut them down when done - that launches the Qt application and intializes the classes in your libraries, which interact using the the MVC model and do the actual work of the application. Three separate modules is not necessary, although it will be more "generic" and reusable" and easier to keep organized that way.

You really have touched on a wide variety of subjects with this question, and again, some of them are related to C++ programming fundamentals, not simply "separating application logic from GUI". Hopefully this answer will help get you moving in the right direction.

An important note: GUI programming is a complete and not particularly easy branch of programming. There are GUI specialists and there are programmers who work with GUI only minimally. (I'm one of the latter group). There is an SE site called User Experience which, although it doesn't deal with GUI programming per se, deals with how users interact with systems, which is directly related to GUI programming techniques. So, when you say "Now I decided to learn GUI programming", know that you are taking on a big job. If you're not really interested in making GUI programming your speciality, you might want to consider using Wizards and pre-fabricated GUI solutions instead of doing it all by hand. QtCreator does provide some such support, as does Code::Blocks. If you intend on making this serious business, there are commercial frameworks available as well. Unless you're doing it simply for the sake of learning, re-inventing the wheel is not recommended for serious commercial programming work.

by anonymous   2017-08-20

As pointed in all the comments on your question, your error occurs because you wrote your code out of a main function. Each C++ program must have it.

By the way, here are good practices for free (found also in comments).

by anonymous   2017-08-20

They are the copy-constructor and the assignment operator. You should look here for information about the copy constructor, and here for information about operator overloading in general.

However, these are fundamental language constructs that should be covered in any introduction to C++. I (and many others) find that the best way to learn C++ is from a book, so I would suggest picking a beginner's C++ book and working through at least the first few chapters before anything else.

by anonymous   2017-08-20

You might want to try a command-line compiler like gcc, clang or Microsofts C/C++ compiler from the command-line nmake. That can be easier to understand than a complicated gui.

If you want to learn C++ then I recommend the book C++ Primer by Stanley Lippman.

by anonymous   2017-08-20

Your code contains several mistakes. Let's examine them.

for(i=0;i<row;i++)
    for(j=0;j<col;j++)
        p[5][10] = p[i][j];

Here, you make no change on your array, because just the value of p[5][10] is changed. Furthermore, you access an invalid memory zone, because array indexes go from 0 to size - 1 in C++. So last index is p[4][9].

if(key[j] = n[5][10])

In C++, comparing two values needs two =, because only one is an affectation that results the if to be always true. A tip to remember : two values to compare need two =.

else if(key[j]!=n[5][10])

The same than before, you access invalid memory zone. And are you sure that j is valid, e.g less than 10 ? If not, you do double invalid access.

cin>>search[r];

As search is an array of char, you do an input of only a single char there, which I think is not what you want and that can leads to segfault.

int phone[r][c] = 
    {
    42-5429874,
    42-5333156,
    42-9824617,
    42-9927562,
    42-6238175
    };

Your array is not good, a simple 1-dimension array is enough, not 2-dimensions. Furthermore, 42-54.. does a subtraction, and I think is not what you want.

There are others mistakes. But why not using C++ abstractions, like std::vector, or std::string ? Your life would get so much easier. But I guess you have an old teacher that never took time to learn C++ news, or that is not a good teacher...

As a beginner, I suggest you to read C++ Primer and Programming: Principles and Practice Using C++ to introduce you both programming and modern C++.

Good luck !

by litb   2017-08-20

Beginner

Introductory, no previous programming experience

Introductory, with previous programming experience

* Not to be confused with C++ Primer Plus (Stephen Prata), with a significantly less favorable review.

Best practices


Intermediate


Advanced


Reference Style - All Levels

C++11/14 References:

  • The C++ Standard (INCITS/ISO/IEC 14882-2011) This, of course, is the final arbiter of all that is or isn't C++. Be aware, however, that it is intended purely as a reference for experienced users willing to devote considerable time and effort to its understanding. As usual, the first release was quite expensive ($300+ US), but it has now been released in electronic form for $60US.

  • The C++14 standard is available, but seemingly not in an economical form – directly from the ISO it costs 198 Swiss Francs (about $200 US). For most people, the final draft before standardization is more than adequate (and free). Many will prefer an even newer draft, documenting new features that are likely to be included in C++17.

  • Overview of the New C++ (C++11/14) (PDF only) (Scott Meyers) (updated for C++1y/C++14) These are the presentation materials (slides and some lecture notes) of a three-day training course offered by Scott Meyers, who's a highly respected author on C++. Even though the list of items is short, the quality is high.

  • The C++ Core Guidelines (C++11/14/17/…) (edited by Bjarne Stroustrup and Herb Sutter) is an evolving online document consisting of a set of guidelines for using modern C++ well. The guidelines are focused on relatively higher-level issues, such as interfaces, resource management, memory management and concurrency affecting application architecture and library design. The project was announced at CppCon'15 by Bjarne Stroustrup and others and welcomes contributions from the community. Most guidelines are supplemented with a rationale and examples as well as discussions of possible tool support. Many rules are designed specifically to be automatically checkable by static analysis tools.

  • The C++ Super-FAQ (Marshall Cline, Bjarne Stroustrup and others) is an effort by the Standard C++ Foundation to unify the C++ FAQs previously maintained individually by Marshall Cline and Bjarne Stroustrup and also incorporating new contributions. The items mostly address issues at an intermediate level and are often written with a humorous tone. Not all items might be fully up to date with the latest edition of the C++ standard yet.

  • cppreference.com (C++03/11/14/17/…) (initiated by Nate Kohl) is a wiki that summarizes the basic core-language features and has extensive documentation of the C++ standard library. The documentation is very precise but is easier to read than the official standard document and provides better navigation due to its wiki nature. The project documents all versions of the C++ standard and the site allows filtering the display for a specific version. The project was presented by Nate Kohl at CppCon'14.


Classics / Older

Note: Some information contained within these books may not be up-to-date or no longer considered best practice.

by rectal_smasher_2000   2017-08-19

>I obviously know what a pointer is, but I want to be able to get the best of me using them

c++11 (and boost before that) has heavily reduced the need for raw pointers with smart pointers, however, you have to keep in mind that C++ is a superset of C, and you'll encounter yourself using C libraries/headers (especially on *nix environments) more often than you'd probably like, so knowing pointers/references and the general mechanics behind them is crucial in my opinion.

as far as getting up to speed with c++, i'd recommend the C++ Primer 5th Edition , since it covers just about everything you'll need including c++11, but isn't too detail heavy that it will turn you away from the language.

as far as best practices are concerned, look into meyer's Effective series of books (C++, Modern C++, STL).

this stackoverflow link is in the sidebar, and is generally the go to answer when anyone asks for book recommendations.

with c++ you can develop for any environment more or less, including the three main ones (win, linux, osx), and there's good support on all the platforms. for IDEs, visual studio and qt creator are the most popular.

by IamTheAsian   2017-08-19

I don't know much about C++ certification but C++ primer is a REALLY good reference book for C++.

To my knowledge, certifications to some companies may not matter but there is definitely no downside of picking up official and recognized certificates. Imo, I wouldn't bother and spend money on "official" certification websites. A lot of people have told me in the past to work with people on open source projects. https://github.com/trending?l=c Build connections and a following.