Title: C Class
1Chapter 2
2C Class
- A class name
- Data members
- Member functions
- Levels of program access
- Public section of a class can be accessed by
anyone - Private section of a class can only be accessed
by member functions and friends of that class - Protected section of a class can only be
accessed by member functions and friends of that
class, and by member functions and friends of
derived classes
3Definition of the C class Rectangle
4Program 2.2 Implementation of operations on
Rectangle
- // In the source file Rectangle.C
- include Rectangle.h
- // The prefix Rectangle identifies
GetHeight() and GetWidth() as member functions
belong to class Rectangle. It is required because
the member functions are implemented outside
their class definition - int RectangleGetHeight() return h
- int RectangleGetWidth() return w
5Constructor and Destructor
- Constructor is a member function which
initializes data members of an object. - Adv all class objects are well-defined as soon
as they are created. - Must have the same name of the class
- Must not specify a return type or a return value
- Destructor is a member fucntion which deletes
data members immediately before the object
disappears. - Must be named identical to the name of the class
prefixed with a tilde . - It is invoked automatically when a class object
goes out of scope or when a class object is
deleted.
6Constructors for Rectangle
- Rectangle r(1, 3, 6, 6)
- Rectangle s new Rectangle(0, 0, 3, 4)
Rectangle t
7Operator Overloading
- C can distinguish the operator when
comparing two floating point numbers and two
integers. But what if you want to compare two
Rectangles?
8Array
- Is it necessary to define an array as an ADT?
- C array requires the index set to be a set of
consecutive integers starting at 0 - C does not check an array index to ensure that
it belongs to the range for which the array is
defined.
9ADT 2.1 GeneralArray
10ADT 2.2 Polynomial
11Polynomial Representations
- Representation 1
- private
- int degree // degree MaxDegree
- float coef MaxDegree 1
- Representation 2
- private
- int degree
- float coef
-
- PolynomialPolynomial(int d)
-
- degree d
- coef new float degree1
12Polynomial Representation 3
- class Polynomial // forward delcaration
- class term
- friend Polynomial
- private
- float coef // coefficient
- int exp // exponent
-
- private
- static term termArrayMaxTerms
- static int free
- int Start, Finish
- term Polynomial termArrayMaxTerms
- Int Polynomialfree 0 // location of next
free location in temArray
13Representation 3 for two Polynomials
- Represent the following two polynomials
- A(x) 2x1000 1
- B(x) x4 10x3 3x2 1
14Polynomial Addition
O(mn)
15Adding a new Term
16Disadvantages of Representing Polynomials by
Arrays
- What should we do when free is going to exceed
MaxTerms? - Either quit or reused the space of unused
polynomials. But costly. - If use a single array of terms for each
polynomial, it may alleviate the above issue but
it penalizes the performance of the program due
to the need of knowing the size of a polynomial
beforehand.
17Sparse Matrices
18ADT 2.3 SparseMatrix
19Sparse Matrix Representation
- Use triple ltrow, column, valuegt
- Store triples row by row
- For all triples within a row, their column
indices are in ascending order. - Must know the number of rows and columns and the
number of nonzero elements
20Sparse Matrix Representation (Cont.)
- class SparseMatrix // forward declaration
- class MatrixTerm
- friend class SparseMatrix
- private
- int row, col, value
-
- In class SparseMatrix
- private
- int Rows, Cols, Terms
- MatrixTerm smArrayMaxTerms
21Transposing A Matrix
- Intuitive way
- for (each row i)
- take element (i, j, value) and store it in (j,
i, value) of the transpose - More efficient way
- for (all elements in column j)
- place element (i, j, value) in position (j, i,
value)
22Transposing a Matrix
O(termscolumns)
23Fast Matrix Transpose
- The O(termscolumns) time gt O(rowscolumns2)
when terms is the order of rowscolumns - A better transpose function
- It first computes how many terms in each columns
of matrix a before transposing to matrix b. Then
it determines where is the starting point of each
row for matrix b. Finally it moves each term from
a to b.
24O(columns)
O(terms)
O(columns-1)
O(terms)
O(row column)
25Matrix Multiplication
- Definition Given A and B, where A is mxn and B
is nxp, the product matrix Result has dimension
mxp. Its ij element is - for 0 i lt m and 0 j lt p.
26(No Transcript)
27Matrix Multiplication
28(No Transcript)
29(No Transcript)
30(No Transcript)
31Representation of Arrays
- Multidimensional arrays are usually implemented
by one dimensional array via either row major
order or column major order. - Example One dimensional array
32Two Dimensional Array Row Major Order
Col 0
Col 1
Col 2
Col u2 - 1
Row 0
X
X
X
X
X
X
X
X
Row 1
Row u1 - 1
X
X
X
X
u2 elements
u2 elements
Row u1 - 1
Row 0
Row 1
Row i
i u2 element
33Generalizing Array Representation
- The address indexing of Array Ai1i2,,in is
- a i1 u2 u3 un
- i2 u3 u4 un
- i3 u4 u5 un
-
-
- in-1 un
- in
- a
34String
- Usually string is represented as a character
array. - General string operations include comparison,
string concatenation, copy, insertion, string
matching, printing, etc.
H
e
l
l
o
W
o
r
l
d
\0
35(No Transcript)
36(No Transcript)
37String Matching The Knuth-Morris-Pratt Algorithm
- Definition If p p0p1pn-1 is a pattern, then
its failure function, f, is defined as - If a partial match is found such that si-j si-1
p0p1pj-1 and si ? pj then matching may be
resumed by comparing si and pf(j1)1 if j ? 0.
If j 0, then we may continue by comparing si1
and p0.
38Fast Matching Example
- Suppose exists a string s and a pattern pat
abcabcacab, lets try to match pattern pat in
string s. - j 0 1 2 3 4 5 6 7
8 9 - pat a b c a b c a c
a b - f -1 -1 -1 0 1 2 3 -1
0 1 -
- s - a b c a ? ? . .
. ? - pat a b c a b c a c
a b - a b c a b c a c
a b
j 4, pf(j-1)1 p1
New start matching point
39(No Transcript)
40(No Transcript)