Stroustrup halusi lisätä C-kieleen uusia ominaisuuksia niin, että sen tehokkuus ja yksinkertaisuus säilyisivät [Str02]. Kieli ei - C-kielen tapaan - sisällä korkean tason tietotyyppejä, kuten matriiseja ja merkkijonoja, vaan sellaiset on käyttäjän itsensä määriteltävissä. Kielen tietorakenteet eivät myöskään sisällä metadataa (''housekeeping information''), vaan esimerkiksi rakenne (struct tai class), joka sisältää kaksi 16-bittistä kokonaislukua, vie muistia vain 32-bittiä.
C++-kielen yhteensopivuus C-kieleen haluttiin säilyttää. C-kieltä voidaan edelleen pitää joitain yksityiskohtia lukuunottamatta C++-kielen ''alijoukkona'' eli C-kielellä kirjoitettu ohjelma on myös kelvollinen C++-ohjelma. C-kieliset ilmaisut, jotka eivät ole C++-kieltä, ovat lähinnä ''huonoa'' C-kieltä, jota ei olla haluttu sallia C++-kielessä. Tärkein syy yhteensopivuuden säilyttämiseksi oli se, että C-kielellä kirjoitettua koodia oli paljon ja sitä haluttiin pitää myös C++-ohjelmoijien käytettävissä [Str02].
Ensimmäisenä ja tärkeimpänä lisäyksenä C-kieleen oli luokka, jonka esikuvana oli Simula67:n luokat [Str97]. Luokat lisäsivät C-kieleen monia kaivattuja ominaisuuksia:
Simula67 olisi muuten ollut sopiva Stroustrupin testatessa tapahtumaohjattuja simulaatioita (event-driven simulations), mutta se oli liian hidas. Siksi Stroustrupin oli lisättävä nämä ominaisuudet C-kieleen [Str97].
Muita C++-kieleen lisättyjä tärkeitä ominaisuuksia olivat muuttujien parempi ja dynaaminen tyypitys, dynaaminen muistin hallinta (komennot new ja delete), kuormitetut funktiot ja viitteet [Str86].