Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   question on CONSTRUCTOR (http://www.go4expert.com/forums/question-on-constructor-t21394/)

ravindrareddy3 17Mar2010 19:03

question on CONSTRUCTOR
 
what will happen if we define a constructor in protected scope in a class?
for eg
class some
{
int x;
protected:
some()
{
x=90;
}
};

itstimetojazz 18Mar2010 11:36

Re: question on CONSTRUCTOR
 
The constructor is never inherited by the derived class, so it doesnt matters wherever u write the constructor.

ravindrareddy3 18Mar2010 13:19

Re: question on CONSTRUCTOR
 
Quote:

Originally Posted by itstimetojazz (Post 65846)
The constructor is never inherited by the derived class, so it doesnt matters wherever u write the constructor.


i am not inheriting it i am using only it only in single class and i wil creat an object to it,then wat is the output?

itstimetojazz 18Mar2010 14:17

Re: question on CONSTRUCTOR
 
well in this case, a compiler error will be thrown. Because u r trying to create a class object which is global to the code whereas the constructor is protected in the class.

xpi0t0s 18Mar2010 14:56

Re: question on CONSTRUCTOR
 
If you're not deriving then don't use protected, because it only makes sense in the context of a derived class. Use private or public instead then your intent is clear. By using protected in a class that is not to be derived you are intentionally obfuscating the meaning of your code.

Public is visible to all, private is visible only to the class, and protected is visible to the class and its derivatives. So this is the same as a private constructor, which means only the class itself and its friends can create an object of that class.

Code:

class some
{
        int x;
protected: some() { x=90; }
};

void test16()
{
        some wibble;
}

There will be no output because this will not compile:
error C2248: 'some::some' : cannot access protected member declared in class 'some'

xpi0t0s 18Mar2010 14:59

Re: question on CONSTRUCTOR
 
This can be fixed by making test16 a friend:
Code:

class some
{
        int x;
protected:
        some() { x=90; }

        friend void test16();
};

void test16()
{
        some wibble;
        printf("%d\n",wibble.x);
}


itstimetojazz 18Mar2010 16:12

Re: question on CONSTRUCTOR
 
other method using inheritence
Code:

Class A
{
protected:
int a;
};

class B:public A
{
public:
int c;
};

int main()
{
 B b;
return 0;
}

Using this method you can use the protected member of base class using the object of derived class


All times are GMT +5.5. The time now is 00:49.