Home > Software design >  What all are considered in the Class scope?
What all are considered in the Class scope?

Time:11-29

Just trying to grab the concept revolving around the scope of the Class in C . If we take an example something like:

#include <iostream>
using namespace std;
string barValue="OUTSIDE CLASS";

class foo
{
    public:
        void print_bar()
        {
            cout<<barValue<<endl;
        }
};

int main()
{
    foo f;
    f.print_bar();
    return 0;
}

I am wondering:

  1. Is the barValue variable is in the Class scope?
  2. Can the barValue be accepted even if it is defined in one of the included files?
  3. Is the file and all the included files can be called as the scope of the foo Class?
  4. I can understand that the barValue will not be considered if it is defined after the Class body. To follow up is that means all the included files comes before the Class body and in general before the current file content?

CodePudding user response:

Question 1

Is the barValue variable is in the class scope?

barValue is a global variable since you have defined it outside any function and class. Therefore barValue can be used inside the class as you did.

Question 2

Can the barValue be accepted even if it is defined in one of the included files?

Yes even if barValue is defined in a header file it can be used in other files because/if it has external linkage as shown in the below example.

file.h

int barvalue = 34;//barvalue has external linkage

main.cpp

#include <iostream>
#include "file.h"

int main()
{
    std::cout<<barvalue<<std::endl;//prints 34
    return 0;
}

Question 3

Is the file and all the included files can be called as the scope of the foo class?

No

Question 4

I can understand that the barValue will not be considered if it is defined after the class body. To follow up is that means all the included files comes before the Class body and in general before the current file content?

You should clarify this question more because i think it is not clear what your are asking here but i will try to answer what i understand from your question.

If you define barValue after the class foo definition then the program will not work because since you have defined it after the class definition, therefore it has not been defined/declared at the point when you write cout<<barValue<<endl; which is what the error says as shown below:

#include <iostream>
using namespace std;


class foo
{
    public:
        void print_bar()
        {
            cout<<barValue<<endl;//error: ‘barValue’ was not declared in this scope
        }
};

int main()
{
    foo f;
    f.print_bar();
    return 0;
}
string barValue="OUTSIDE CLASS";
  • Related