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:

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

  • 相关阅读:
    mybatis的mapper文件中的一个标签是否可以写多条SQL语句?是否存在事物?
    Filebeat快速入门
    JVM第一弹
    eclipse git 解决冲突 解决 mergetool 不能使用问题
    使用gitee作为图床 编写markdown自动上传文件
    JVM面试题 第一弹
    学习了JsonSchema,我自定义了一个校验代码
    JsonSchema用法
    Docker简介与安装
    Docker第二弹之常用命令
  • 原文地址:https://www.cnblogs.com/zero-jh/p/5037875.html
Copyright © 2011-2022 走看看