Accessing protected member in base class from a derived class

Nilzone-

I have the following snippet of code:

const int DATE_LENGTH = 6;

class BaseClass {
    protected:
        int date[DATE_LENGTH];
        int year;
    public:
        BaseClass(){}
        BaseClass(int *d) {
            for (int i = 0; i < DATE_LENGTH; i++) { date[i] = d[i];}
            year = 1900 + date[4] * 10 + date[5];
        }
        void printYear() {
            cout << year << endl;
        }
};

class DerivedClass : public BaseClass {
    public:
        DerivedClass() {}
        void printYear() {
            cout << year << endl;
        }
};

int main(int argc, char *argv[]) {
    int dob[] = {1, 6, 1, 0, 9, 0};
    BaseClass base(dob);
    base.printYear(); // prints 1990

    DerivedClass derived;
    derived.printYear(); // prints 1439156608
}

I'm having trouble understanding why the output from printYear() in my derived class is outputting junk. Am I missing something very obvious?

Any help would be appreciated!

Vlad from Moscow

The default constructor of class BaseClass

BaseClass(){}

does not initislize data members date and year

This default constructor is called by the default constructor of class DerivedClass when you create object derived

DerivedClass derived;

So these data members have arbitrary values and your program has undefined behaviour.

Change the derived class the following way

class DerivedClass : public BaseClass {
    public:
        using BaseClass::BaseClass;
        DerivedClass() {}
        void printYear() {
            cout << year << endl;
        }
};

and create object derived as

DerivedClass derived( dob );

Or instead of the using declaration you can yourself explicitly define a constructor in class DerivedClass that has one parameter of type int * and calls the corresponding constructor of the base class. For example

class DerivedClass : public BaseClass {
    public:
        DerivedClass() {}
        DerivedClass( int *d ) : BaseClass( d ) {}
        void printYear() {
            cout << year << endl;
        }
};

Collected from the Internet

Please contact [email protected] to delete if infringement.

edited at
0

Comments

0 comments
Login to comment

Related

From Dev

Accessing protected member in base class from a derived class

From Dev

Accessing derived class member from base class pointer

From Dev

Accessing base member functions in class derived from template class

From Dev

Accessing derived class member from base class pointer

From Java

Accessing Base class protected data member vector in derived class give error 139

From Dev

Derived class cannot use member pointer to protected base class member

From Dev

Protected member not accessible in a derived class?

From Dev

C++: cannot access protected member from derived class

From Dev

C++ : Accessing private member of base or global variable from a derived class

From Dev

Single protected member variable in base class VS Multiple private member variable in derived class

From Dev

Conversion in derived class inaccessible if base class is protected

From Dev

Accessing protected members of derived class with CRTP

From Dev

Accessing protected members in derived class C++

From Dev

Polymorphism: accessing derived class elements from a base class array

From Dev

Accessing virtual base class function from a derived class

From Dev

Accessing derived class methods from a vector of type base class

From Dev

Protected member function address in derived class is not accessible

From Dev

Access member of derived class from pointer of base class

From Dev

Calling a member function of a derived class from the base class constructor

From Dev

returning instance of derived class from base class member function

From Dev

Call a function from base class that uses the member functions of derived class

From Dev

C++populating base class protected member using derived class constructor

From Dev

Accessing Protected member from a class in different assembly from the code behind class(partial class) of C#

From Dev

Python: Hide member of base class in derived class

From Dev

constexpr base class member set by derived class

From Dev

Member function pointer cast, from Derived to Base class

From Dev

Accessing derived class names from the parent class

From Dev

Why a derived class can't access a protected getter from the base class?

From Dev

Protected method access from derived class

Related Related

  1. 1

    Accessing protected member in base class from a derived class

  2. 2

    Accessing derived class member from base class pointer

  3. 3

    Accessing base member functions in class derived from template class

  4. 4

    Accessing derived class member from base class pointer

  5. 5

    Accessing Base class protected data member vector in derived class give error 139

  6. 6

    Derived class cannot use member pointer to protected base class member

  7. 7

    Protected member not accessible in a derived class?

  8. 8

    C++: cannot access protected member from derived class

  9. 9

    C++ : Accessing private member of base or global variable from a derived class

  10. 10

    Single protected member variable in base class VS Multiple private member variable in derived class

  11. 11

    Conversion in derived class inaccessible if base class is protected

  12. 12

    Accessing protected members of derived class with CRTP

  13. 13

    Accessing protected members in derived class C++

  14. 14

    Polymorphism: accessing derived class elements from a base class array

  15. 15

    Accessing virtual base class function from a derived class

  16. 16

    Accessing derived class methods from a vector of type base class

  17. 17

    Protected member function address in derived class is not accessible

  18. 18

    Access member of derived class from pointer of base class

  19. 19

    Calling a member function of a derived class from the base class constructor

  20. 20

    returning instance of derived class from base class member function

  21. 21

    Call a function from base class that uses the member functions of derived class

  22. 22

    C++populating base class protected member using derived class constructor

  23. 23

    Accessing Protected member from a class in different assembly from the code behind class(partial class) of C#

  24. 24

    Python: Hide member of base class in derived class

  25. 25

    constexpr base class member set by derived class

  26. 26

    Member function pointer cast, from Derived to Base class

  27. 27

    Accessing derived class names from the parent class

  28. 28

    Why a derived class can't access a protected getter from the base class?

  29. 29

    Protected method access from derived class

HotTag

Archive