zoukankan      html  css  js  c++  java
  • C++专题(三)

    16.使用this指针复制数据.

    头文件:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Obj
     6 {
     7     int a, b;
     8 
     9 public:
    10     Obj(int x = 0, int y = 0)
    11     {
    12         a = x;
    13         b = y;
    14     }
    15 
    16     void copy(Obj &);
    17     void display()
    18     {
    19         cout << "a = " << a << ", b = " << b << endl;
    20     }
    21 };
    22 
    23 void Obj::copy(Obj &aObj)
    24 {
    25     if (this == &aObj)
    26         return;
    27     this->a = aObj.a;
    28     this->b = aObj.b;
    29 }
    obj.h

    源文件:

     1 #include "obj.h"
     2 
     3 void main(void)
     4 {
     5     Obj x1(22, 25), x2(33, 46);
     6 
     7     cout << "x1: ";
     8     x1.display();
     9     cout << "x2: ";
    10     x2.display();
    11     x1.copy(x2);
    12     cout << "x1: ";
    13     x1.display();
    14 }
    View Code

    结果:

    x1: a = 22, b = 25

    x2: a = 33, b = 46

    x1: a = 33, b = 46

    Mark:

      当一个对象调用成员函数时,系统先将该对象的地址赋给this指针,然后调用成员函数,成员函数对成员数据进行操作时,隐含使用了this指针.

    17.完整实现str类的例子.

    头文件:

     1 #ifndef _STR_H
     2 #define _STR_H
     3 
     4 #include <iostream>
     5 #include <cstring>
     6 
     7 using namespace std;
     8 
     9 class str
    10 {
    11 private:
    12     char *st;
    13 
    14 public:
    15     str(char *s);
    16     str(str &s);
    17     str & operator = (str &a);
    18     str & operator = (char *s);
    19     void print()
    20     {
    21         cout << st << endl;
    22     }
    23 
    24     ~str()
    25     {
    26         delete st;
    27     }
    28 };
    29 
    30 str::str(char *s)
    31 {
    32     st = new char[strlen(s) + 1];
    33     strcpy(st, s);
    34 }
    35 
    36 str::str(str &a)
    37 {
    38     st = new char[strlen(a.st) + 1];
    39     strcpy(st, a.st);
    40 }
    41 
    42 str & str::operator = (str &a)
    43 {
    44     if (this == &a)
    45         return *this;
    46     delete st;
    47     st = new char[strlen(a.st) + 1];
    48     strcpy(st, a.st);
    49     return *this;
    50 }
    51 
    52 str & str::operator = (char *s)
    53 {
    54     delete st;
    55     st = new char[strlen(s) + 1];
    56     strcpy(st, s);
    57     return *this;
    58 }
    59 
    60 #endif
    str.h

    源文件:

     1 #include "str.h"
     2 
     3 void main(void)
     4 {
     5     str s1("We"), s2("They"), s3(s1);
     6 
     7     s1.print();
     8     s2.print();
     9     s3.print();
    10 
    11     s2 = s1 = s3;
    12     s3 = "Go home!";
    13     s3 = s3;
    14     s1.print();
    15     s2.print();
    16     s3.print();
    17 }
    View Code

    结果:

    We

    They

    We

    We

    We

    Go home!

    18.求4个数的最大值的类模板程序.

    头文件:

     1 #ifndef _MAX4_H
     2 #define _MAX4_H
     3 
     4 #include <iostream>
     5 
     6 using namespace std;
     7 
     8 template <class T>
     9 class Max4
    10 {
    11     T a, b, c, d;
    12     T Max(T a, T b)
    13     {
    14         return (a > b) ? a : b;
    15     }
    16 
    17 public:
    18     Max4(T, T, T, T);
    19     T Max(void);
    20 };
    21 
    22 template <class T>
    23 Max4<T>::Max4(T x1, T x2, T x3, T x4):a(x1),b(x2),c(x3),d(x4) 
    24 {
    25 }
    26 
    27 template <class T>
    28 T Max4<T>::Max(void)
    29 {
    30     return Max(Max(a, b), Max(c, d));
    31 }
    32 
    33 #endif
    max4.h

    源文件:

    1 #include "max4.h"
    2 
    3 void main(void)
    4 {
    5     Max4<char> C('W', 'w', 'a', 'A');
    6     Max4<int> A(-25, -67, -66, -256);
    7     Max4<double> B(1.25, 4.3, -8.6, 3.5);
    8     cout << C.Max() << " " << A.Max() << " " << B.Max() << endl;
    9 }
    View Code

    结果:

    w -25 4.3

    19.演示对4个数字求和的类模板程序.

    头文件:

     1 #ifndef _SUM_H
     2 #define _SUM_H
     3 
     4 template <class T, int size = 4>
     5 class Sum
     6 {
     7 private:
     8     T m[size];
     9 
    10 public:
    11     Sum(T a, T b, T c, T d)
    12     {
    13         m[0] = a;
    14         m[1] = b;
    15         m[2] = c;
    16         m[3] = d;
    17     }
    18 
    19     T S()
    20     {
    21         return m[0] + m[1] + m[2] + m[3];
    22     }
    23 };
    24 
    25 #endif
    sum.h

    源文件:

     1 #include <iostream>
     2 #include "sum.h"
     3 
     4 using namespace std;
     5 
     6 void main(void)
     7 {
     8     Sum<int, 4> num1(-23, 5, 8, -2);
     9     Sum<float, 4> f1(3.5f, -8.5f, 8.8f, 9.7f);
    10     Sum<double, 4> d1(355.4, 253.8, 456.7, -67.8);
    11     Sum<char, 4> c1('W', -2, -1, -1);            //字符减,等效于'W','U','T','S'
    12     cout << num1.S() << ", " << f1.S() << ", " << d1.S() << ", " << c1.S() << endl;
    13 }
    View Code

    结果:

    -12, 13.5, 998.1, S

    20.使用缺省内联函数实现单一继承

    头文件:

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 class Point
     6 {
     7 private:
     8     int X, Y;
     9 
    10 public:
    11     Point(int a, int b)
    12     {
    13         X = a;
    14         Y = b;
    15         cout << "Point..." << endl;
    16     }
    17 
    18     void Showxy()
    19     {
    20         cout << "X = " << X << ", Y = " << Y << endl;
    21     }
    22 
    23     ~Point()
    24     {
    25         cout << "Delete Point" << endl;
    26     }
    27 };
    28 
    29 class Rectangle:public Point
    30 {
    31 private:
    32     int H, W;
    33 
    34 public:
    35     Rectangle(int a, int b, int h, int w):Point(a, b)
    36     {
    37         H = h;
    38         W = w;
    39         cout << "Rectangle..." << endl;
    40     }
    41 
    42     void Show()
    43     {
    44         cout << "H = " << H << ", W = " << W << endl;
    45     }
    46 
    47     ~Rectangle()
    48     {
    49         cout << "Delete Rectangle" << endl;
    50     }
    51 };
    rectangle.h

    源文件:

    1 #include "rectangle.h"
    2 
    3 void main(void)
    4 {
    5     Rectangle r1(3, 4, 5, 6);
    6     r1.Showxy();
    7     r1.Show();
    8 }
    View Code

    结果:

    Point...

    Rectangle...

    X = 3, Y = 4

    H = 5, W = 6

    Delete Rectangle

    Delete Point

    Mark:

      当定义派生类的一个对象时,首先调用基类的构造函数,对基类成员进行初始化,然后执行派生类的构造函数,如果某个基类仍是一个派生类,则这个过程递归进行.

  • 相关阅读:
    88. Merge Sorted Array
    87. Scramble String
    86. Partition List
    85. Maximal Rectangle
    84. Largest Rectangle in Histogram
    83. Remove Duplicates from Sorted List
    82. Remove Duplicates from Sorted List II
    81. Search in Rotated Sorted Array II
    80. Remove Duplicates from Sorted Array II
    计算几何——点线关系(叉积)poj2318
  • 原文地址:https://www.cnblogs.com/zero-jh/p/5037875.html
Copyright © 2011-2022 走看看