Sample Qns On C and C++

Download as pdf or txt
Download as pdf or txt
You are on page 1of 27

SRM University

For Private circulation only Programming with C

C, C++ Interview Questions

1. How many bits are used to represent Unicode, ASCII, UTF-16, and UTF-8characters? Unicode requires 16 bits and ASCII require 7 bits. Although the ASCII character set uses only 7 bits, it is usually represented as 8 bits. UTF-8 represents characters using 8, 16 and 18 bit patterns. UTF-16 uses 16-bit and larger bit patterns. 2. What is the difference between declaring a variable and defining a variable? In declaration we just mention the type of the variable and it's name. We do not initialize it. But defining means declaration + initialization. Example int i; is just a declaration where int i= 10; are definition. 3. What is the difference between end of line and end of file characters? End of Line refers to the '\n'( new line character). It will perform operations till it come across '\n'. EOF refers to End of File. It is the last character in the file (if it is not empty). If the file is empty then only EOF will be present. Some compilers give its value as -1. 4. What is the difference between break and continue statement? break statement: A statement that terminates the current loop iteration and causes execution to break out of a loop. continue statement : A statement that terminates the current loop iteration and persists the loop with the next iteration.

5. What will be the output? main() { int c[ ]={2.8,3.4,4,6.7,5}; int j,*p=c,*q=c; for(j=0;j<5;j++) { printf(" %d ",*c); for(j=0;j<5;j++){ printf(" %d ",*p); ++p; } } Answer: 2222223465 Explanation: Initially pointer c is assigned to both p and q. In the first loop, since only q is incremented and not c , the value 2 will be printed 5 times. In second loop p itself is incremented. So the values 2 3 4 6 5 will be printed. Compiled by H. Srimathi 1

++q;

SRM University

For Private circulation only

C, C++ Interview Questions

6. What will be the output? main() { char *p; printf("%d %d ",sizeof(*p),sizeof(p)); } Answer: 12 Explanation: The sizeof() operator gives the number of bytes taken by its operand. p is a character pointer, which needs one byte for storing its value (a character). Hence sizeof(*p) gives a value of 1. Since it needs two bytes to store the address of the character pointer sizeof(p) gives 2. 7. What will be the output? main() { int i=3; switch(i) { default: printf("zero"); case 1: printf("one"); break; case 2: printf("two"); break; case 3: printf("three"); break; }} Answer : three Explanation : The default case can be placed anywhere inside the loop. It is executed only when all other cases doesn't match.

8. What will be the output? main() { printf("%x",-1<<4); } Answer: fff0 Compiled by H. Srimathi 2

SRM University

For Private circulation only

C, C++ Interview Questions

Explanation : -1 is internally represented as all 1's. When left shifted four times the least significant 4 bits are filled with 0's. The %x format specifier specifies that the integer value be printed as a hexadecimal value. 9. What will be the output? main() { int i=5; printf("%d%d%d%d%d%d", i++, i--, ++i , --i, i); } Answer: 45545 Explanation: The arguments in a function call are pushed into the stack from left to right. The evaluation is by popping out from the stack and also from right to left, hence the result. 10. What will be the output? main() { printf("%p",main); } Answer: Some address will be printed. Explanation: Function names are just addresses (just like array names are addresses). main() is also a function. So the address of function main will be printed. %p in printf specifies that the argument is an address. They are printed as hexadecimal numbers. 11. What will be the output? main() { int i=400,j=300; printf("%d..%d"); } Answer: 300..400 Explanation: printf takes the values of the first two assignments of the program. Any number of printf's may be given. All of them take only the first two values. If more number of assignments given in the program,then printf will take garbage values. Compiled by H. Srimathi 3

SRM University

For Private circulation only

C, C++ Interview Questions

12. What will be the output? main() { int i; printf("%d",scanf("%d",&i)); /* value 10 is given as input here */ } Answer: 1 Explanation: Scanf returns number of items successfully read and not 10. Here 10 is given as input which should have been scanned successfully. So number of items read is 1. 13. What will be the output? main() {int i=0; for(;i++;printf("%d",i)) ; printf("%d",i); } Answer: 1

Explanation: Before entering into the for loop the checking condition is "evaluated". Here it evaluates to 0 (false) and comes out of the loop, and i is incremented (note the semicolon after the for loop). 14. What will be the output? main( ){ static int a[ ] = {0,1,2,3,4}; int *p[ ] = {a,a+1,a+2,a+3,a+4}; int **ptr = p; ptr++; printf(\n %d %d %d, ptr-p, *ptr-a, **ptr); *ptr++; printf(\n %d %d %d, ptr-p, *ptr-a, **ptr); *++ptr; printf(\n %d %d %d, ptr-p, *ptr-a, **ptr); ++*ptr; printf(\n %d %d %d, ptr-p, *ptr-a, **ptr); }

Compiled by H. Srimathi

SRM University

For Private circulation only

C, C++ Interview Questions

Answer: 111 222 333 344 Explanation: Let us consider the array and the two pointers with some address a 0 1 2 3 4 100 102 104 106 108 p 100 102 104 106 108 1000 1002 1004 ptr 1006 1008

1000 2000 After execution of the instruction ptr++ value in ptr becomes 1002, if scaling factor for integer is 2 bytes. Now ptr p is value in ptr starting location of array p, (1002 1000) / (scaling factor) = 1, *ptr a = value at address pointed by ptr starting value of array a, 1002 has a value 102 so the value is (102 100)/(scaling factor) = 1, **ptr is the value stored in the location pointed by the pointer of ptr = value pointed by value pointed by 1002 = value pointed by 102 = 1. Hence the output of the firs printf is 1, 1, 1. After execution of *ptr++ increments value of the value in ptr by scaling factor, so it becomes1004. Hence, the outputs for the second printf are ptr p = 2, *ptr a = 2, **ptr = 2. After execution of *++ptr increments value of the value in ptr by scaling factor, so it becomes1004. Hence, the outputs for the third printf are ptr p = 3, *ptr a = 3, **ptr = 3. After execution of ++*ptr value in ptr remains the same, the value pointed by the value is incremented by the scaling factor. So the value in array p at location 1006 changes from 106 10 108,. Hence, the outputs for the fourth printf are ptr p = 1006 1000 = 3, *ptr a = 108 100 = 4, **ptr = 4. 15. main() { int i=-1; +i; printf("i = %d, +i = %d \n",i, +i); } Answer: i = -1, +i = -1 Explanation: Compiled by H. Srimathi 5 What will be the output?

SRM University

For Private circulation only

C, C++ Interview Questions

Unary + is the only dummy operator in C. Where-ever it comes you can just ignore it just because it has no effect in the expressions (hence the name dummy operator). 16. What will be the position of the file marker? a: fseek(ptr,0,SEEK_SET); b: fseek(ptr,0,SEEK_CUR); Answer : a: The SEEK_SET sets the file position marker to the starting of the file. b: The SEEK_CUR sets the file position marker to the current position of the file. 17. main() { main(); } Answer: Runtime error : Stack overflow. What will be the output?

Explanation: main function calls itself again and again. Each time the function is called its return address is stored in the call stack. Since there is no condition to terminate the function call, the call stack overflows at runtime. So it terminates the program and results in an error. 18. main() { char *str1="abcd"; char str2[]="abcd"; printf("%d %d %d",sizeof(str1),sizeof(str2),sizeof("abcd")); } Answer: 255 Explanation: In first sizeof, str1 is a character pointer so it gives you the size of the pointer variable. In second sizeof the name str2 indicates the name of the array whose size is 5 (including the '\0' termination character). The third sizeof is similar to the second one. Compiled by H. Srimathi 6 What will be the output?

SRM University 19. main() { char not; not=!2; printf("%d",not); } Answer: 0 Explanation:

For Private circulation only

C, C++ Interview Questions

What will be the output?

! is a logical operator. In C the value 0 is considered to be the boolean value FALSE, and any non-zero value is considered to be the boolean value TRUE. Here 2 is a non-zero value so TRUE. !TRUE is FALSE (0) so it prints 0.

20.

What will be the output?

int i=10; main() { extern int i; { int i=20; { const volatile unsigned i=30; printf("%d",i); } printf("%d",i); } printf("%d",i); } Answer: 30,20,10 Explanation: '{' introduces new block and thus new scope. In the innermost block i is declared as, const volatile unsigned which is a valid declaration. i is assumed of type int. So printf prints 30. In the next block, i has value 20 and so printf prints 20. In the outermost block, i is declared as extern, so no storage space is allocated for it. After compilation is over the linker resolves it to global variable i (since it is the only variable visible there). So it prints i's value as 10. Compiled by H. Srimathi 7

SRM University

For Private circulation only

C, C++ Interview Questions

21. main()

What will be the output?

{ int *j; { int i=10; j=&i; } printf("%d",*j); }

Answer: 10 Explanation: The variable i is a block level variable and the visibility is inside that block only. But the lifetime of i is lifetime of the function so it lives upto the exit of main function. Since the i is still allocated space, *j prints the value stored in i since j points i. 22. What will be the output?

#include<stdio.h> main() { const int i=4; float j; j = ++i; printf("%d %f", i,++j); } Answer: Compiler error Explanation: i is a constant. you cannot change the value of constant

Compiled by H. Srimathi

SRM University 23.

For Private circulation only

C, C++ Interview Questions

What will be the output? main() { int i=_l_abc(10); printf("%d\n",--i); } int _l_abc(int i) { return(i++); }

Answer: 9 Explanation: return(i++) it will first return i and then increments. i.e. 10 will be returned. 24. What will be the output? #include<stdio.h> main() { FILE *ptr; char i; ptr=fopen("zzz.c","r"); while((i=fgetch(ptr))!=EOF) printf("%c",i); } Answer: contents of zzz.c followed by an infinite loop Explanation: The condition is checked against EOF, it should be checked against NULL.

25.

What will be the output? main(){ unsigned int i; for(i=1;i>-2;i--) printf("c aptitude"); }

Compiled by H. Srimathi

SRM University Explanation:

For Private circulation only

C, C++ Interview Questions

i is an unsigned integer. It is compared with a signed value. Since the both types doesn't match, signed is promoted to unsigned value. The unsigned equivalent of -2 is a huge value so condition becomes false and control comes out of the loop. 26. What will be the output?

void main() { static int i=5; if(--i){ main(); printf("%d ",i); } } Answer: 0000 Explanation: The variable "i" is declared as static, hence memory for i will be allocated for only once, as it encounters the statement. The function main() will be called recursively unless i becomes equal to 0, and since main() is recursively called, so the value of static i ie., 0 will be printed every time the control is returned.

27. What will be the output? void main() { static int i=i++, j=j++, k=k++; printf(i = %d j = %d k = %d, i, j, k); } Answer: i=1j=1k=1 Explanation: Since static variables are initialized to zero by default.

Compiled by H. Srimathi

10

SRM University

For Private circulation only

C, C++ Interview Questions

28. What will be the output? void main() { while(1){ if(printf("%d",printf("%d"))) break; else continue; } } Answer: Garbage values Explanation: The inner printf executes first to print some garbage value. The printf returns no of characters printed and this value also cannot be predicted. Still the outer printf prints something and so returns a non-zero value. So it encounters the break statement and comes out of the while statement 29. What will be the output? main() { unsigned int i=10; while(i-->=0) printf("%u ",i); } Answer: 10 9 8 7 6 5 4 3 2 1 0 65535 65534.. Explanation: Since i is an unsigned integer it can never become negative. So the expression i-- >=0 will always be true, leading to an infinite loop. 30. What will be the output? main() { int a[10]; printf("%d",*a+1-*a+3); } Answer: 4 Explanation: *a and -*a cancels out. The result is as simple as 1 + 3 = 4 Compiled by H. Srimathi 11

SRM University

For Private circulation only

C, C++ Interview Questions

31. What will be the output? main() { int i=0; while(+(+i--)!=0) i-=i++; printf("%d",i); }

Answer: -1 Explanation: Unary + is the only dummy operator in C. So it has no effect on the expression and now the while loop is, while(i--!=0) which is false and so breaks out of while loop. The value 1 is printed due to the post-decrement operator. 32. What will be the output? main() { signed char i=0; for(;i>=0;i++) ; printf("%d\n",i); } Answer -128 Explanation Notice the semicolon at the end of the for loop. THe initial value of the i is set to 0. The inner loop executes to increment the value from 0 to 127 (the positive range of char) and then it rotates to the negative value of -128. The condition in the for loop fails and so comes out of the for loop. It prints the current value of i that is -128. 33. Is the following statement a declaration/definition. Find what does it mean? int (*x)[10]; Answer Definition.x is a pointer to array of(size 10) integers. Apply clock-wise rule to find the meaning of this definition

Compiled by H. Srimathi

12

SRM University

For Private circulation only

C, C++ Interview Questions

34. What will be the output? int swap(int *a,int *b) { *a=*a+*b; *b=*a-*b; *a=*a-*b; } main() { int x=10,y=20; swap(&x,&y); printf("x= %d y = %d\n",x,y); } Answer x = 20 y = 10 Explanation This is one way of swapping two values. Simple checking will help understand this. 35. What will be the output? main() { int i=5; printf(%d,i=++i ==6); } Answer: 1 Explanation: The expression can be treated as i = (++i==6), because == is of higher precedence than = operator. In the inner expression, ++i is equal to 6 yielding true(1). Hence the result 36. What will be the output? void main() {static int i; while(i<=10) (i>2)?i++:i--; printf(%d, i); }

Compiled by H. Srimathi

13

SRM University Answer: 32767

For Private circulation only

C, C++ Interview Questions

Explanation: Since i is static it is initialized to 0. Inside the while loop the conditional operator evaluates to false, executing i--. This continues till the integer value rotates to positive value (32767). The while condition becomes false and hence, comes out of the while loop, printing the i value 37. What will be the output? main() { int a=2,*f1,*f2; f1=f2=&a; *f2+=*f2+=a+=2.5; printf("\n%d %d %d",a,*f1,*f2); }

Answer: 16 16 16 Explanation: f1 and f2 both refer to the same memory location a. So changes through f1 and f2 ultimately affects only the value of a. 38. Is the following code legal? struct a { int x; struct a b; } Answer: No Explanation: Is it not legal for a structure to contain a member that is of the same type as in this case. Because this will cause the structure declaration to be recursive without end. 39. Is the following code legal? struct a { int x; struct a *b; }

Compiled by H. Srimathi

14

SRM University Answer: Yes.

For Private circulation only

C, C++ Interview Questions

Explanation: *b is a pointer to type struct a and so is legal. The compiler knows, the size of the pointer to a structure even before the size of the structure is determined(as you know the pointer to any type is of same size). This type of structures is known as self-referencing structure. 40. What will be the output? void main() { printf(sizeof (void *) = %d \n, sizeof( void *)); printf(sizeof (int *) = %d \n, sizeof(int *)); printf(sizeof (double *) = %d \n, sizeof(double *)); printf(sizeof(struct unknown *) = %d \n, sizeof(struct unknown *)); }

Answer : sizeof (void *) = 2 sizeof (int *) = 2 sizeof (double *) = 2 sizeof(struct unknown *) = 2 Explanation: The pointer to any type is of same size. 41.What will be the output? void main() { int i=10, j=2; int *ip= &i, *jp = &j; int k = *ip/*jp; printf(%d,k); } Answer: Compiler Error: Unexpected end of file in comment started in line 5. Explanation: The programmer intended to divide two integers, but by the maximum munch rule, the compiler treats the operator sequence / and * as /* which happens to be the starting of comment. To force what is intended by the programmer, Compiled by H. Srimathi 15

SRM University

For Private circulation only

C, C++ Interview Questions

int k = *ip/ *jp; /* give space explicity separating / and * Or */ int k = *ip/(*jp); /* put braces to force the intention will solve the problem. */

42. What will be the output? main() { char a[4]="HELL"; printf("%s",a); }

Answer: HELL%@!~@!@???@~~! Explanation: The character array has the memory just enough to hold the string HELL and doesnt have enough space to store the terminating null character. So it prints the HELL correctly and continues to print garbage values till it accidentally comes across a NULL character.

43.What will be the output? main() { int a=10,*j; void *k; j=k=&a; j++; k++; printf("\n %u %u ",j,k); } Answer: Compiler error: Cannot increment a void pointer Explanation: Void pointers are generic pointers and they can be used only when the type is not known and as an intermediate address storage type. No pointer arithmetic can be done on it and you cannot apply indirection operator (*) on void pointers.

Compiled by H. Srimathi

16

SRM University

For Private circulation only

C, C++ Interview Questions

44.What is NULL pointer assignment? A NULL pointer assignment is a runtime error. It occurs due to various reasons one is that your program has tried to access an illegal memory location. Illegal location means either the location is in the operating systems address space or in the other processes memory space. In stdio.h NULL is defined as 0, So whenever your program tries to access 0th location the operating system kills your program with runtime assignment error because the 0th location is in the operating systems address space and operating system does not allow access to its address space by user program. 45.What is TSR? Terminate and Stay Resident (TSR) is a system call in DOS operating systems that returned control to the system as if the program had quit, but kept the program in memory. Many software vendors use the call to create the appearance of multitasking, by transferring control back to the terminated program on automatic or externally-generated events 46.What is NaN? In computing, NaN (Not a Number) is a value or symbol that is usually produced as the result of an operation on invalid input operands, especially in floating-point calculations. For example, most floating-point units are unable to explicitly calculate the square root of negative numbers, and will instead indicate that the operation was invalid and return a NaN result. 47.What is the function used to convert ASCII to Integer? atoi() is the function used to convert ASCII to Integer.

48. What is the difference between # include <file> and # include file #include<file> This will refer the given file in the standard input and output directory. but #include"file" This will first refers the given file in the current directory if this not found it will refers in the standard input and output directory. 49. if "condition" printf("Hello"); else printf("World") - what should be the condition, so the output will be HelloWorld. if((printf("hello"))==0) printf("hello"); else printf("world");

Compiled by H. Srimathi

17

SRM University

For Private circulation only

C, C++ Interview Questions

50. Is it possible to execute code even after the program exits the main() function? Answer 1: The standard C library provides a function named atexit() that can be used to perform cleanup operations when your program terminates. You can set up a set of functions you want to perform automatically when your program exits by passing function pointers to the at exit() function. Answer 2: This can be done by using #pragma directive as: #pragma exit <function name> Using above code, any function can be executed after program exits the main function but function must be declared before pragma directive is reached. 51. What is the difference between NULL and NUL? NULL is a macro defined in <stddef.h> for the null pointer.

NUL is the name of the first character in the ASCII character set. It corresponds to a zero value. There is no standard macro NUL in C. 52. What is pragma? The #pragma preprocessor directive allows each compiler to implement compiler-specific features that can be turned on and off with the #pragma statement. For instance, your compiler might support a feature called loop optimization. This feature can be invoked as a command-line option or as a #pragma directive. To implement this option using the #pragma directive, you would put the following line into your code: #pragma loop_opt(on) Conversely, you can turn off loop optimization by inserting the following line into your code: #pragma loop_opt(off)

Compiled by H. Srimathi

18

SRM University

For Private circulation only

C, C++ Interview Questions

53. Is using exit() the same as using return? No. The exit() function is used to exit your program and return control to the operating system. The return statement is used to return from a function and return control to the calling function. If you issue a return from the main() function, you are essentially returning control to the calling function, which is the operating system. In this case, the return statement and exit() function are similar. 54. How can C programs run without header files? If we save our program with .c extention before compiling it, the compiler with automatically include the header files. It will not show any error.

Compiled by H. Srimathi

19

SRM University

For Private circulation only

C, C++ Interview Questions

C++

1. What are the differences between a C++ struct and C++ class? The C++ struct has all the features of the class. The only differences are that a struct defaults to public member access and public base class inheritance, and a class defaults to the private access specifier and private base class inheritance. 2.What will be the output? class Sample {public: int *ptr; Sample(int i) { ~Sample() { void PrintVal() { }; ptr = new int(i); } delete ptr; } cout << "The value is " << *ptr;

void SomeFunc(Sample x) {cout << "Say i am in someFunc " << endl;} int main() {Sample s1= 10;

SomeFunc(s1);

s1.PrintVal();}

Answer: Say i am in someFunc Null pointer assignment(Run-time error) Explanation: As the object is passed by value to SomeFunc the destructor of the object is called when the control returns from the function. So when PrintVal is called it meets up with ptr that has been freed.The solution is to pass the Sample object by reference to SomeFunc: void SomeFunc(Sample &x) {cout << "Say i am in someFunc " << endl; } because when we pass objects by refernece that object is not destroyed, while returning from the function.

3.Which is the parameter that is added to every non-static member function when it is called? Answer: this pointer

Compiled by H. Srimathi

20

SRM University

For Private circulation only

C, C++ Interview Questions

4.What will be the output? class base { public: int bval; base(){ bval=0;} }; class deri : public base { public: int dval; deri(){ dval=1;} }; void SomeFunc(base *arr, int size) { for(int i=0; i<size; i++,arr++) cout<<arr->bval; cout<<endl; } int main() { base BaseArr[5]; SomeFunc(BaseArr,5); deri DeriArr[5]; SomeFunc(DeriArr,5); } Answer: 00000 01010 Explanation: The function SomeFunc expects two arguments.The first one is a pointer to an array of base class objects and the second one is the sizeof the array.The first call of someFunc calls it with an array of bae objects, so it works correctly and prints the bval of all the objects. When Somefunc is called the second time the argument passed is the pointeer to an array of derived class objects and not the array of base class objects. But that is what the function expects to be sent. So the derived class pointer is promoted to base class pointer and the address is sent to the function. SomeFunc() knows nothing about this and just treats the pointer as an array of base class objects. So when arr++ is met, the size of base class object is taken into consideration and is incremented by sizeof(int) bytes for bval (the deri class objects have bval and dval as members and so is of size >= sizeof(int)+sizeof(int) ).

Compiled by H. Srimathi

21

SRM University

For Private circulation only

C, C++ Interview Questions

5.What will be the output? class base { public: void baseFun(){ cout<<"from base"<<endl;} }; class deri : public base { public: void baseFun(){ cout<< "from derived"<<endl;} void SomeFunc(base *baseObj) { baseObj->baseFun();}

};

int main() {base baseObject; SomeFunc(&baseObject); deri deriObject; SomeFunc(&deriObject); } Answer: from base from base Explanation: As we have seen in the previous case, SomeFunc expects a pointer to a base class. Since a pointer to a derived class object is passed, it treats the argument only as a base class pointer and the corresponding base function is called. 6.What will be the output? class base { public: virtual void baseFun(){ cout<<"from base"<<endl;} }; class deri:public base { public: void baseFun(){ cout<< "from derived"<<endl;} };

Compiled by H. Srimathi

22

SRM University

For Private circulation only

C, C++ Interview Questions

void SomeFunc(base *baseObj) { baseObj->baseFun();} int main() { base baseObject; SomeFunc(&baseObject); deri deriObject; SomeFunc(&deriObject); } Answer: from base from derived Explanation: Remember that baseFunc is a virtual function. That means that it supports run-time polymorphism. So the function corresponding to the derived class object is called. 7.What will be the output? void main() { int a, *pa, &ra; pa = &a; ra = a; cout <<"a="<<a <<"*pa="<<*pa <<"ra"<<ra ; }

Answer : Compiler Error: 'ra',reference must be initialized Explanation : Pointers are different from references. One of the main differences is that the pointers can be both initialized and assigned, whereas references can only be initialized. So this code issues an error.

Compiled by H. Srimathi

23

SRM University

For Private circulation only

C, C++ Interview Questions

8.

What will be the output?

const int size = 5; void print(int *ptr) { cout<<ptr[0];} void print(int ptr[size]) { cout<<ptr[0]; } void main() { int a[size] = {1,2,3,4,5}; int *b = new int(size); print(a); print(b); } Answer: Compiler Error : function 'void print(int *)' already has a body Explanation: Arrays cannot be passed to functions, only pointers (for arrays, base addresses) can be passed. So the arguments int *ptr and int prt[size] have no difference as function arguments. In other words, both the functoins have the same signature andso cannot be overloaded. 9. What will be the output?

class some{ public: ~some() { cout<<"some's destructor"<<endl; } }; void main() { some s; s.~some(); } Answer: some's destructor some's destructor Explanation:

Compiled by H. Srimathi

24

SRM University

For Private circulation only

C, C++ Interview Questions

Destructors can be called explicitly. Here 's.~some()' explicitly calls the destructor of 's'. When main() returns, destructor of s is called again, hence the result. 10. What is a dangling pointer? A dangling pointer arises when you use the address of an object after its lifetime is over. This may occur in situations like returning addresses of the automatic variables from a function or using the address of the memory block after it is freed. 11. What is the difference between a pointer and a reference? A reference must always refer to some object and, therefore, must always be initialized; pointers do not have such restrictions. A pointer can be reassigned to point to different objects while a reference always refers to an object with which it was initialized 12. Name the operators that cannot be overloaded?? sizeof, ., .*, .->, ::, ?: 13. What is "this" pointer? The this pointer is a pointer accessible only within the member functions of a class, struct, or union type. It points to the object for which the member function is called. Static member functions do not have a this pointer. When a non-static member function is called for an object, the address of the object is passed as a hidden argument to the function. For example, the following function call. myDate.setMonth( 3 ); can be interpreted this way: setMonth( &myDate, 3 ); The objects address is available from within the member function as the this pointer. It is legal, though unnecessary, to use the this pointer when referring to members of the class. 14. What is inline function? When a function is declared inline, the function is expanded at the calling block. The function is not treated as a separate unit like other normal functions. But a compiler is free to decide, if a function qualifies to be an inline function. If the inline function is found to have larger chunk of code, it will not be treated as an inline function, but as like other normal functions. Inline functions are treated like macro definitions by the C++ compiler. They are declared with the keyword inline as follows.

Compiled by H. Srimathi

25

SRM University

For Private circulation only

C, C++ Interview Questions

//Declaration for C++ Tutorial inline sample: int add(int x,int y); //Definition for C++ Tutorial inline sample: iinline int add(int x,int y) {return x+y;} In fact, the keyword inline is not necessary. If the function is defined with its body directly and the function has a smaller block of code, it will be automatically treated as inline by the compiler. As implied, inline functions are meant to be used if there is a need to repetitively execute a small block of code, which is smaller. When such functions are treated inline, it might result in a significant performance difference. 15. What problem does the namespace feature solve? Suppose that you buy two different general-purpose class libraries from two different vendors, and each library has some features that you'd like to use. You include the headers for each class library: #include "vendor1.h" #include "vendor2.h" and then it turns out that the headers have this in them: // vendor1.h ... various stuff ... class String { ... }; // vendor2.h ... various stuff ... class String { ... }; This usage will trigger a compiler error, because class String is defined twice. In other words, each vendor has included a String class in the class library, leading to a compile-time clash. Even if you could somehow get around this compile-time problem, there is the further problem of linktime clashes, where two libraries contain some identically-named symbols.

Compiled by H. Srimathi

26

SRM University

For Private circulation only

C, C++ Interview Questions

The namespace feature gets around this difficulty by means of separate named namespaces: // vendor1.h ... various stuff ... namespace Vendor1 { class String { ... }; } // vendor2.h ... various stuff ... namespace Vendor2 { class String { ... }; } There are no longer two classes named String, but instead there are now classes named Vendor1::String and Vendor2::String. In future discussions we will see how namespaces can be used in applications.

Main References / Source of Document: 1. 2. 3. 4. Technical Aptitude Questions by Vasant B Parmar geekinterview.com techinterview.org coolinterview.com

*Wish you all the Best*

Compiled by H. Srimathi

27

You might also like