i was learning to overload ‘<<‘ in a very simple program,& during my study,i found the following surprising output of my program.
#include<iostream>
#include<conio.h>
#include<string>
using namespace std;
class student
{
int age;
public:
student(){}
student(int a){age=a;}
friend ostream &operator<<(ostream &stream,student o);
};
/*operator overloaded in this block*/
ostream &operator<<(ostream &stream,student o)
{
stream<<o.age;
return stream;
}
int main()
{
student ob1(20),ob2(020);
cout<<ob1; /*will yield 20(as desired)*/
cout<<"\n"<<ob2; /*yielding 16(why so)*/
_getch();
return 0;
}
any explainations please
0 is the octal prefix for C++ integer literals and 20 in octal is 16 in decimal.
To explain further: If a literal starts with 0 the rest of the number will be interpreted to be in octal representation. In your example 2*8^1 + 0 * 8^0.
The syntax for integer literals is given in §2.14.2 in the most recent standard draft.