From 9f14490b93c143020cc58bf7e9c94b54add348af Mon Sep 17 00:00:00 2001 From: sinoding Date: Tue, 3 May 2011 22:44:08 +0800 Subject: [PATCH] ch21 commit --- ch21/const | Bin 0 -> 10781 bytes ch21/const.cc | 75 +++++++++++++++++++++++++++++++++++++++++ ch22/IntegerMapping.cc | 49 +++++++++++++++++++++++++++ ch22/VectorMaping | Bin 0 -> 11806 bytes ch22/VectorMaping.cc | 72 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 196 insertions(+) create mode 100755 ch21/const create mode 100644 ch21/const.cc create mode 100644 ch22/IntegerMapping.cc create mode 100755 ch22/VectorMaping create mode 100644 ch22/VectorMaping.cc diff --git a/ch21/const b/ch21/const new file mode 100755 index 0000000000000000000000000000000000000000..a46859b4d47b0adc6e9a5c8237adba82cecec233 GIT binary patch literal 10781 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 + +using namespace std; + +class FirstClass { + public: + void print1() { + std::cout << "FirstClass::print1()" << std::endl; + } + virtual void print2() { + std::cout << "FirstClass::print2()" << std::endl; + } + void print3() { + print1(); + print2(); + } +}; + +class SecondClass : public FirstClass { + public: + void print1() { + std::cout << "SecondClass::print1()" << std::endl; + } + virtual void print2() { + std::cout << "SecondClass::print2()" << std::endl; + } +}; + +class ThirdClass : public SecondClass { + public: + void print1() { + std::cout << "ThirdClass::print1()" << std::endl; + } + virtual void print2() { + std::cout << "ThirdClass::print2()" << std::endl; + } +}; + +int main(int argc, char **argv) { + FirstClass x; + x.print1(); + x.print2(); + x.print3(); + + std::cout << std::endl; + + SecondClass y; + y.print1(); + y.print2(); + y.print3(); + + std::cout << std::endl; + + ThirdClass z; + z.print1(); + z.print2(); + z.print3(); + + return 0; +} + +// FirstClass::print1() +// FirstClass::print2() +// FirstClass::print1() +// FirstClass::print2() + +// SecondClass::print1() +// SecondClass::print2() +// FirstClass::print1() +// SecondClass::print2() + +// ThirdClass::print1() +// ThirdClass::print2() +// FirstClass::print1() +// ThirdClass::print2() diff --git a/ch22/IntegerMapping.cc b/ch22/IntegerMapping.cc new file mode 100644 index 0000000..c9bd6e4 --- /dev/null +++ b/ch22/IntegerMapping.cc @@ -0,0 +1,49 @@ +#include + +using namespace std; + +class IntegerMapping { + public: + virtual int maps(int x) const = 0; +}; + +class Translation : public IntegerMapping { + public: + Translation(int l) : k(l) {} + int maps(int x) const { + return x+k; + } + private: + int k; +}; + +class Negate : public IntegerMapping { + public: + Negate() {} + int maps(int x) const { + return -x; + } +}; + +class Compose : public IntegerMapping { + public: + Compose(IntegerMapping &n1, IntegerMapping &n2) : m1(&n1), m2(&n2) {} + int maps(int x) const { + return m1->maps(m2->maps(x)); + } + private: + IntegerMapping *m1; + IntegerMapping *m2; +}; + +int weird(IntegerMapping *m, int a, int b) { + return m->maps(a) * m->maps(b); +} + +int main(int argc, char **argv) { + Translation t(5); + Negate n; + Compose c(&t, &n); + cout << weird(&c, 15, 16) << endl; + return 0; +} diff --git a/ch22/VectorMaping b/ch22/VectorMaping new file mode 100755 index 0000000000000000000000000000000000000000..1edb182e6ad7b59465be68ada665dcdeb92988bd GIT binary patch literal 11806 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

-fk8=H^tS^4L^@aZlGGt5IKhFB6S$~e4 zb0ohbPuaI|kw_CUjwJfO<-jN_=7iP)le(RvKj8W=IzflNz+^|(j$lNMkJ_Bx`9qf2 z&A6oBB(7W!tX%!4+3_PX@Q|Y_B-%yC(rT9uEak&() zDtu=y#a9)c_e=3=CGoKouPJ;dEyZh<#IsU-bsYkrp1w%YRSF6UW)Q@<+J;S!T zG`=`q-M@sL&jF|Q%6_T%IkJTOGb}Irhcf@42TuL`I`>Zt`*VH?J3nQ4wbIa%dJhb_ zcUgXfpL^Mis`r)ehbZt`_%Cr-o+nel$)AVW{uVa$ByehPceSArY42YEuPHOHzRh-? zb&dPW+DgY68l|FvxAUdCk~ zxr%Z6l3DAmQ>XYjieZ%nUT(aG8F$a~uW36sD#NvYPXnjUNhX$*+qwH%$+6N-EEGdo&oc4a^PSzY3gk#GnyS#*kVd0<5s*Uu%&fVlcEAM z(KAR~i?VmJda`|eN2Q+No}Idy_PyJ82TkFq8p#)H(R*IH7Uu_*K+HZp6K*xl!~iuC z2Vgcg9g~ zlqnqBNf?GcF2m1H+-ABuNEmMWa>zY?s@)PU|-~uH`b)aS!^uC(&Mdo5w2r0xxdw+l^umv znx)gCbmrO9zl_u-yhP9euc)j`8`h;NZ{>EPK5-8Io#%1<;L eQv8h$7P?))GIsSrTz^}jsmy^!AO5pP?|%UkdH~%3 literal 0 HcmV?d00001 diff --git a/ch22/VectorMaping.cc b/ch22/VectorMaping.cc new file mode 100644 index 0000000..bfd7eb6 --- /dev/null +++ b/ch22/VectorMaping.cc @@ -0,0 +1,72 @@ +#include + +using namespace std; + +class IntegerMapping { + public: + virtual int maps(int x) const = 0; +}; + +class Negate : public IntegerMapping { + public: + Negate() {} + int maps(int x) const { + return -x; + } +}; + +class VectorMaping { + public: + virtual int *maps(int *c, int s) const = 0; +}; + +class Shift : public VectorMaping { + public: + Shift(int l) : k(l) {} + int *maps(int *c, int s) const { + int *result = new int[s]; + for (int j = 0; j < s; j++) { + result[j] = c[(j+k)%s]; + } + return result; + } + private: + int k; +}; + +class MetaMaping : public VectorMaping { + public: + MetaMaping(const IntegerMapping &m) : im(&m) {} + int *maps(int *c, int s) const { + int *result = new int[s]; + for (int k = 0; k < s; k++) { + result[k] = im->maps(c[k]); + } + return result; + } + private: + const IntegerMapping *im; +}; + +void print(const VectorMaping &vm, int *c, int s) { + int *t = vm.maps(c, s); + for (int j = 0; j < s; j++) { + std::cout << t[j]; + if (j < s-1) { + std::cout << " "; + } else { + std::cout << std::endl; + } + } + delete[] t; +} + +int main(int argc, char **argv) { + int v[] = {1, 2, 3, 4}; + print(Shift(3), v, sizeof(v)/sizeof(int)); + print(MetaMaping(Negate()), v, sizeof(v)/sizeof(int)); + + return 0; +} + +