summaryrefslogtreecommitdiff
path: root/test/test23.cpp
blob: ffbe93ce7c3c4f02062da917921ffbd4fa4e6048 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
#include <string>
#include <vector>

struct Data1;

typedef void (*FuncPtr1) (void);
typedef void (*FuncPtr2) (Data1 *ptr);
typedef void (Data1::*FuncPtr3) (Data1 *ptr);
typedef void (&FuncPtr4)(const void *const);

struct Data1
{
    Data1()
    {
    }

    Data1(Data1 *ptr0) :
        ptrval(ptr0)
    {
    }

    int val;
    Data1 *ptrval;
    int arr[3];
    std::string str1;

    int ftest1()
    {
        return 1;
    }

    static int ftest2(Data1 *ptr0)
    {
        return 1;
    }

    void ftest3(Data1 *ptr0)
    {
    }
};

int k;

class Object1
{
    Data1 *dataptr;

    Object1(Data1 *ptr1) :
        dataptr(ptr1)
    {
        if (dataptr)
        {
            ptr1->ftest1();
        }
        dataptr->ftest1();
    }

    void func1(Data1 *const ptr1)
    {
        dataptr = ptr1;
        if (dataptr)
        {
            ptr1->ftest1();
        }
    }

    void func2(Data1 *const ptr1)
    {
        dataptr = ptr1;
        if (ptr1)
        {
            ptr1->ftest1();
        }
    }

    void func3(Data1 *const ptr1)
    {
        dataptr = ptr1;
        if (!dataptr)
        {
            ptr1->ftest1();
        }
    }

    void func4(Data1 *const ptr1)
    {
        dataptr = ptr1;
        if (!dataptr && ptr1)
        {
            ptr1->ftest1();
        }
    }

    void func5(Data1 *const ptr1)
    {
        dataptr = ptr1;
        if (!dataptr || !ptr1)
        {
            ptr1->ftest1();
        }
    }

    void func6(FuncPtr1 ptr1)
    {
        ptr1();
    }

    void func7(Data1 *ptr1)
    {
        FuncPtr2 fptr2;
        fptr2(ptr1);
    }

    void func8(Data1 *ptr1)
    {
        FuncPtr3 fptr2 = &Data1::ftest3;
        (ptr1->*fptr2)(ptr1);
    }

    void func9(FuncPtr4 ptr1, Data1 *const ptr2)
    {
        ptr1(ptr2);
    }

    void func10(Data1 *ptr1, Data1 *ptr2)
    {
        FuncPtr3 fptr2 = &Data1::ftest3;
        (ptr1->*fptr2)(ptr2);
    }
};