2010-04-25 5 views
4

Dans le programme ci-dessous, est la ligneappel constructeur de la classe de base

correcte/permis? Cela signifie-t-il que les règles ANSI sont respectées?

#include <iostream> 

class Base 
{ 
public: 
    Base(): x_(0) 
    { 
    std::cout << "Base default constructor called" << std::endl; 
    } 
    Base(int x): x_(x) 
    { 
    std::cout << "Base constructor called with x = " << x << std::endl; 
    } 

    void display() const 
    { 
    std::cout << x_ << std::endl; 
    } 

protected: 
    int x_;  
}; 

class Derived: public Base 
{ 
public: 
    Derived(): Base(1), y_(1.2) 
    { 
    std::cout << "Derived default constructor called" << std::endl; 
    } 
    Derived(double y): Base(), y_(y) 
    { 
    std::cout << "Derived constructor called with y = " << y << std::endl; 
    } 

    void display() const 
    { 
    std::cout << Base::x_ << ", " << y_ << std::endl; 
    } 

private: 
    double y_;  
}; 

int main() 
{ 
Base b1; 
b1.display(); 
Derived d1; 
d1.display(); 
std::cout << std::endl; 
Base b2(-9); 
b2.display(); 
Derived d2(-8.7); 
d2.display(); 

return 0; 
} 
+0

Si les pourparlers sur OP 'ANSI' il utilise pur' C' probablement – abatishchev

+4

@abatishchev Est-ce que le code ressemble à un "C pur"? Et il existe aussi une norme ANSI pour C++. –

+0

@Neil Butterworth: Vous avez raison, mon oubli. – abatishchev

Répondre

5

C'est autorisé, mais c'est inutile, car le compilateur fera l'appel pour vous. Malheureusement, je n'ai pas envie de faire un chalut standard ce matin.

0

Ceci est correct, mais les appels aux constructeurs par défaut de la classe de base ne sont pas nécessaires. En supposant que vous utilisez g ++, vous pouvez utiliser l'indicateur suivant: -ansi (< => std = C++ 98)

Questions connexes