Name Spaces
-
Upload
pankaj-kumar -
Category
Documents
-
view
214 -
download
1
description
Transcript of Name Spaces
![Page 1: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/1.jpg)
Namespaces
![Page 2: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/2.jpg)
Namespaces Allow to group entities like classes, objects and functions under a name.
This way the global scope can be divided in "sub-scopes", each one with its own name.
The format of namespaces is:
Namespace identifier{entities}
![Page 3: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/3.jpg)
Here identifier is any valid identifier and entities is the set of classes, objects and functions that are included within the namespace
namespace myNamespace
{
int a, b;
}
In this case, the variables a and b are normal variables declared within a namespace called myNamespace. In order to access these variables from outside the myNamespace namespace we have to use the scope operator ::.
For example, to access the previous variables from outside myNamespace we can write:
myNamespace::a
myNamespace::b
![Page 4: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/4.jpg)
The functionality of namespaces is especially useful in the case that there is a possibility that a global object or function uses the same identifier as another one, causing redefinition errors.
// namespaces
#include <iostream>
using namespace std;
namespace first
{
int var = 5;
}
namespace second
{
double var = 3.1416;
}
int main ()
{
cout << first::var << endl;
cout << second::var << endl;
return 0;
}
![Page 5: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/5.jpg)
using
The keyword using is used to introduce a name from a namespace into the current declarative region.
// using
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
int y = 10;
}
namespace second
{
double x = 3.1416;
double y = 2.7183;
}
int main ()
{
using first::x;
using second::y;
cout << x << endl;
cout << y << endl;
cout << first::y << endl;
cout << second::x << endl;
return 0;
}
![Page 6: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/6.jpg)
The keyword using can also be used as a directive to introduce an entire namespace:
// using
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
int y = 10;
}
namespace second
{
double x = 3.1416;
double y = 2.7183;
}
int main ()
{
using namespace first;
cout << x << endl;
cout << y << endl;
cout << second::x << endl;
cout << second::y << endl;
return 0;
}
![Page 7: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/7.jpg)
Using and using namespace have validity only in the same block in which they are stated or in the entire code if they are used directly in the global scope.
Some times we might want to first use the objects of one namespace and then those of another one, we could do something like the following example
![Page 8: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/8.jpg)
// using namespace example
#include <iostream>
using namespace std;
namespace first
{
int x = 5;
}
namespace second
{
double x = 3.1416;
}
int main ()
{
{
using namespace first;
cout << x << endl;
}
{
using namespace second;
cout << x << endl;
}
return 0;
}
![Page 9: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/9.jpg)
Namespace alias(Tagging namespaces)
We can declare alternate names for existing namespaces according to the following format:
namespace new_name = current_name;
![Page 10: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/10.jpg)
Exception
• An exception is a unusual, often unpredictable event, detectable by software or hardware, that requires special processing occurring at runtime
• In C++, a variable or class object that represents an exceptional event.
![Page 11: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/11.jpg)
Handling Exception
• If without handling,•Program crashes•Falls into unknown state
• An exception handler is a section of program code that is designed to execute when a particular exception occurs
•Resolve the exception•Lead to known state, such as exiting the program
![Page 12: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/12.jpg)
Standard Exceptions
• Exceptions Thrown by the Language•new
• Exceptions Thrown by Standard Library Routines
• Exceptions Thrown by user code, using throw statement
![Page 13: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/13.jpg)
The throw Statement
Throw: to signal the fact that an exception has occurred; also called raise
ThrowStatement throw Expression
![Page 14: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/14.jpg)
The try-catch Statement
try Blockcatch (FormalParameter) Blockcatch (FormalParameter)
TryCatchStatement
How one part of the program catches and processes the exception that another part of the program throws.
FormalParameter
DataType VariableName
…
![Page 15: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/15.jpg)
Example of a try-catch Statement
try{ // Statements that process personnel data and may throw // exceptions of type int, string, and SalaryError}catch ( int ){ // Statements to handle an int exception}catch ( string s ){ cout << s << endl; // Prints "Invalid customer age" // More statements to handle an age error}catch ( SalaryError ){ // Statements to handle a salary error}
![Page 16: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/16.jpg)
Execution of try-catch
No statements throw
an exception
Statement following entire try-catch
statement
A statement throws
an exception
Exception Handler
Statements to deal with exception are executed
Control moves directly to exception handler
![Page 17: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/17.jpg)
Throwing an Exception to be Caught by the Calling Code
void Func4() { if ( error ) throw ErrType(); }
Normalreturn
void Func3(){ try { Func4(); } catch ( ErrType ) { } }
Functioncall
Return fromthrown exception
![Page 18: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/18.jpg)
Practice: Dividing by ZERO
Apply what you know:
int Quotient(int numer, // The numerator
int denom ) // The denominator
{
if (denom != 0)
return numer / denom;
else
//What to do?? do sth. to avoid program //crash
}
![Page 19: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/19.jpg)
int Quotient(int numer, // The numerator
int denom ) // The denominator
{
if (denom == 0)
throw DivByZero();
//throw exception of class DivByZero
return numer / denom;
}
A Solution
![Page 20: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/20.jpg)
A Solution
// quotient.cpp -- Quotient program
#include<iostream.h>#include <string.h>
int Quotient( int, int );
class DivByZero {}; // Exception class
int main()
{
int numer; // Numerator
int denom; // Denominator
//read in numerator
and denominator
while(cin)
{ try { cout << "Their quotient: "
<< Quotient(numer,denom) <<endl;
} catch ( DivByZero )//exception handler
{
cout<<“Denominator can't be 0"<< endl;
}
// read in numerator and denominator }
return 0;
}
![Page 21: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/21.jpg)
#include <iostream.h>int main(){char * buf; try { buf = new char [51200000000]; if(buf ==0) throw "Memory Allocation failure!"; cout<<"Successful"; } catch (char *str) { cout<<"Exception raised:"<< str<<"\n"; } return 0;}
![Page 22: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/22.jpg)
#include <iostream.h>
class number
{
private:
int num;
public:
void read()
{
cin>>num;
}
int div(number num2){
if(num2.num==0){ throw "WRONG";}else return num/num2.num;
}};
![Page 23: Name Spaces](https://reader033.fdocuments.in/reader033/viewer/2022051517/55cf8ef4550346703b975ada/html5/thumbnails/23.jpg)
void main(){
number n1,n2;int result=0;cout<<"Enter number1-";n1.read();cout<<"Enter number2-";n2.read();try{
cout<<"\nTrying the division...";result=n1.div(n2);cout<<"\nsuccessful\n";
}catch(char *p){
cout<<p<<"\nfailed\n";cout<<"Exception :divide by 0\n";
}cout<<"num1/num2 "<<result;
}