Calling the base class constructor

In the program below is the line

Derived(double y): Base(), y_(y) 

right / allowed? That is, does it comply with ANSI rules?

 #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; } 
+4
source share
2 answers

This is allowed, but it is pointless as the compiler will make a call for you. I'm afraid that this morning I don’t feel like doing a standard trawl.

+5
source

This is correct, but base class calls are not needed by default. Assuming you are using g ++, you can use the following flag: -ansi (<=> -std = C ++ 98)

0
source

Source: https://habr.com/ru/post/1307929/


All Articles