Template exception handling
This presentation is the property of its rightful owner.
Sponsored Links
1 / 17

補充 : 樣板 (template) & 例外處理 (exception handling) PowerPoint PPT Presentation


  • 161 Views
  • Uploaded on
  • Presentation posted in: General

補充 : 樣板 (template) & 例外處理 (exception handling). swaps.cpp :參考值與函數參數 funtemp.cpp :函數樣板 (template) twotemps.cpp :多載樣板 類別樣板 (class template) – Stack<T> 標準 C++ 程式庫 (Standard C++ Library) complex<T> 範例程式 標準樣板程式庫 (Standard Template Library, STL) STL: stack<T> 範例程式 程式設計練習 ( 一 )

Download Presentation

補充 : 樣板 (template) & 例外處理 (exception handling)

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Template exception handling

補充: 樣板(template) & 例外處理(exception handling)

  • swaps.cpp:參考值與函數參數

  • funtemp.cpp:函數樣板(template)

  • twotemps.cpp:多載樣板

  • 類別樣板(class template) – Stack<T>

  • 標準C++程式庫(Standard C++ Library)

  • complex<T> 範例程式

  • 標準樣板程式庫(Standard Template Library, STL)

  • STL: stack<T> 範例程式

  • 程式設計練習(一)

  • 程式設計練習(二)


Swaps cpp 1 3

swaps.cpp:參考值與函數參數(1/3)

#include <iostream.h>

void swapr(int & a, int & b);// a, b are aliases for ints

void swapp(int * p, int * q);// p, q are addresses of ints

void swapv(int a, int b);// a, b are new variables

int main(void) {

int wallet1 = 300;

int wallet2 = 350;

cout << "wallet1 = $" << wallet1;

cout << " wallet2 = $" << wallet2 << "\n";

cout << "Using references to swap contents:\n";

swapr(wallet1, wallet2); // pass variables

cout << "wallet1 = $" << wallet1;

cout << " wallet2 = $" << wallet2 << "\n";

cout << "Using pointers to swap contents:\n";

swapp(&wallet1, &wallet2);// pass addresses of variables

cout << "wallet1 = $" << wallet1;

cout << " wallet2 = $" << wallet2 << "\n";


Swaps cpp 2 3

swaps.cpp:參考值與函數參數(2/3)

cout << "Trying to use passing by value:\n";

swapv(wallet1, wallet2); // pass values of variables

cout << "wallet1 = $" << wallet1;

cout << " wallet2 = $" << wallet2 << "\n";

return 0;

}

void swapr(int & a, int & b) { // use references (參考值)

int temp;

temp = a; // use a, b for values of variables

a = b;

b = temp;

}

void swapp(int * p, int * q) { // use pointers (指標)

int temp;

temp = *p; // use *p, *q for values of variables

*p = *q;

*q = temp;

}


Swaps cpp 3 3

swaps.cpp:參考值與函數參數(3/3)

void swapv(int a, int b) // try using values (數值)

{

int temp;

temp = a; // use a, b for values of variables

a = b;

b = temp;

}

  • wallet1 = $300 wallet2 = $350

  • Using references to swap contents:

  • wallet1 = $350 wallet2 = $300

  • Using pointers to swap contents:

  • wallet1 = $300 wallet2 = $350

  • Trying to use passing by value:

  • wallet1 = $300 wallet2 = $350


Funtemp cpp template 1 2

funtemp.cpp:函數樣板(template) (1/2)

#include <iostream.h>

template <class Any> // function template prototype

void swap(Any &a, Any &b);

int main(void) {

int i = 10, j = 20;

cout << "i, j = " << i << ", " << j << ".\n";

cout << "Using compiler-generated int swapper:\n";

swap(i,j); // generates void swap(int &, int &)

cout << "Now i, j = " << i << ", " << j << ".\n";

double x = 24.5, y = 81.7;

cout << "x, y = " << x << ", " << y << ".\n";

cout << "Using compiler-generated double swapper:\n";

swap(x,y); //generates void swap(double&, double&)

cout << "Now x, y = " << x << ", " << y << ".\n";

return 0;

}


Funtemp cpp template 2 2

funtemp.cpp:函數樣板(template) (2/2)

// function prototype definition

template <class Any>

void swap(Any &a, Any &b)

{

Any temp;

temp = a;

a = b;

b = temp;

};

  • i, j = 10, 20.

  • Using compiler-generated int swapper:

  • Now i, j = 20, 10.

  • x, y = 24.5, 81.7.

  • Using compiler-generated double swapper:

  • Now x, y = 81.7, 24.5.


Class template stack t 1 3

類別樣板(class template) – Stack<T> (1/3)

  • 堆疊(Stack)類別

    class Stack{

    public:

    Stack(int size=10);

    ~Stack(){ delete [] Stk;};

    Stack& operator<<(int item);

    Stack& operator>>(int &item);

    int IsEmpty() { return (top==-1); }

    private:

    int top;

    int StackSize;

    int *Stk;

    };

  • 如何能存放不同的資料型態?


Class template stack t 2 3

類別樣板(class template) – Stack<T> (2/3)

#include <iostream.h>

template<typename T>

class Stack{

public:

Stack(int size=10);

~Stack(){ delete [] Stk;};

Stack& operator<<(T item);

Stack& operator>>(T &item);

int IsEmpty() { return (top==-1); }

private:

int top;

int StackSize;

T *Stk;

};

template<typename T>

Stack<T>::Stack(int size) {

Stk = new T [size];

StackSize = size;

top = -1;

}


Class template stack t 3 3

類別樣板(class template) – Stack<T> (3/3)

template<typename T>

Stack<T>& Stack<T>::operator<<(T item) {

top++;

Stk[top] = item;

return *this;

}

template<typename T>

Stack<T>& Stack<T>::operator>>(T &item) {

item = Stk[top];

top--;

return *this;

}

main() {

float item;

Stack<float> s(10);

s << 1.1; s << 2.2; s << 3.3;

while(!s.IsEmpty()) {

s >> item;

cout << item << endl;

}

}


Standard c library

Standard C++ Library

  • 參考資料: Borland C++ Builder/Help/Standard C++ Library

  • The Standard C++ Library is a large and comprehensive collection of classes and functions for fine-grained, low-level programming. Within this library, you will find the following components:

    • The large set of data structures and algorithms formerly known as the Standard Template Library (STL)

    • An iostream facility

    • A locale facility

    • A templatized string class

    • A templatized complex class for representing complex numbers

    • A valarray class optimized for handling numeric arrays

    • A uniform framework for describing the execution environment, using a template class named numeric_limits and specializations for each fundamental datatype

    • Memory management features

    • Extensive support for national character sets

    • Exception handling features


Complex t

complex<T> 範例程式

#include <complex>

#include <iostream>

using namespace std;

main()

{

complex<double> x(1.0, 2.0);

cout << x + x << x * x;

}


Stl container classes

STL: Container classes (容器類別)

  • Container types provided by the Standard C++ Library

  • vectorRandom access to elements, efficient insertion at end

  • vector<bool>Specialization of vector optimized for bool

  • listEfficient insertion and removal throughout

  • dequeRandom access, efficient insertion at front or back

  • setElements maintained in order, efficient test for inclusion, insertion, and removal

  • multisetSet with repeated copies

  • bitsetBit container templated on size rather than contained type

  • mapAccess to values via keys, efficient insertion and removal

  • multimapMap permitting duplicate keys

  • stringCharacter container enhanced for string operations

  • Container adaptors of the Standard C++ Library

  • stackInsertions and removals only from top

  • queueInsertions at back, removals from front

  • priority queueEfficient access and removal of largest values


Stl stack t

STL: stack<T>

  • As a data abstraction, a stack is traditionally defined as any object that implements the operations defined in the following table:

  • FunctionImplemented operation

  • empty()Returns true if the collection is empty

  • size()Returns number of elements in collection

  • top()Returns (but does not remove) the topmost element in the stack

  • push(newElement)Pushes a new element onto the stack

  • pop()Removes (but does not return) the topmost element from the stack

  • Programs that use the stack data abstraction should include the file stack:

  • # include <stack>


Stl stack t1

STL: stack<T> 範例程式

#include <stack>

#include <iostream>

using namespace std;

main()

{

stack<int> s;

int item;

s.push(1);

s.push(2);

s.push(3);

while(!s.empty()) {

item = s.top();

s.pop();

cout << item << endl;

}

}


Exception handling

補充 -- 例外處理(exception handling)

try // try-block

{

throw exception_type;

}

// catch handlers

catch(exception_type)

{

handler

}


Template exception handling

#include <iostream.h>

class ErrorScore

{

public:

int score;

ErrorScore(int s) { score = s; }

};

void check(int score)

{

if (score < 0 || score > 100)

throw ErrorScore(score);

}


Template exception handling

int main()

{

int score[4];

try

{

for(int i=0; i<4; i++)

{

cin >> score[i];

check(score[i]);

}

}

catch (ErrorScore &err)

{

printf("Error Score: %d\n", err.score);

}

return 0;

}


  • Login