关于模版子类初始化模版父类,调用父类成员问题(解决)以及运算符重载什么时候用

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
#include<iostream>
using namespace std;
 
template <typename T>
class Parent
{
public:
    Parent(T p1)
    {
        this->p1 = p1;
    }
    void printP()
    {
        cout << "p1==" << p1 << endl;
    }
protected:
    T p1;
};
template <typename U>
class Child : public  Parent <U>//这里的<>在parent前后都可以
{
public:
    Child(U c1, U tem) :Parent <U> (tem)
    {
        this->c1 = c1;
         
    }
    void printC()
    {
        cout << " c1 = " << c1 << " tem = " << tem << endl;//不理解这里为什么会出现错误?
    }
private:
    U c1;
};
 
class B:public Parent<int>
{
public:
    B(int b1, int p):Parent(p)
    {
        this->b1 = b1;
    }
    void printB()
    {
        cout << " b1 = " << b1 << " p1 = " << p1 << endl;
    }
private:
    int b1;
 
};
int main()
{
    Child<int> h1(1, 3);
    h1.printC();
    h1.printP();
    cout << " 我是漂亮的分割线\n";
    B b1(2,5);
    b1.printB();
    b1.printP();
    cout << " 我是漂亮的分割线\n";
    Parent <char> a1('d');
    a1.printP();
 
    system("pause");
}

  结果显示: error C2065: “tem”: 未声明的标识符

 

  

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
#include<iostream>
using namespace std;
 
template <typename T>
class Parent
{
public:
    Parent(T p1=0)
    {
        this->p1 = p1;
    }
    void printP()
    {
        cout << "p1==" << p1 << endl;
    }
    friend ostream & operator << (ostream &out, Parent & e1);
     
protected:
    T p1;
};
ostream & operator<<(ostream &out, Parent<int> & e1)
{
    out << e1.p1;
    return out;
}
template <typename U>
class Child : public  Parent <U>//这里的<>在parent前后都可以
{
public:
    Child(U c1, U tem) :tem (tem)
    {
        this->c1 = c1;
         
    }
    void printC()
    {
        //因为这里的tem是父类的对象,打印对象的时候应该是tem。什么什么,之类的而不是直接打印tem
 
        cout << " c1 = " << c1 << " tem = " << tem << endl;//不理解这里为什么会出现错误?<br>还是存在疑问,这里什么时候能够直接调用tem参数呢,而不是对象?
    }
private:
    U c1;
    Parent<U> tem;
};
 
//class B :public Parent<int>
//{
//public:
//  B(int b1, int p) :Parent(p)
//  {
//      this->b1 = b1;
//  }
//  void printB()
//  {
//      cout << " b1 = " << b1 << " p1 = " << p1 << endl;
//  }
//private:
//  int b1;
//
//};
int main()
{
    Child<int> h1(1, 3);
    h1.printC();
    h1.printP();
    cout << " 我是漂亮的分割线\n";
    /*B b1(2,5);
    b1.printB();
    b1.printP();*/
    cout << " 我是漂亮的分割线\n";
    Parent <char> a1('d');
    a1.printP();
 
    system("pause");
}

  

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
#include<iostream>
using namespace std;
 
template <typename T>
class Parent
{
public:
    Parent(T p1)
    {
        this->p1 = p1;
    }
    void printP()
    {
        cout << "p1==" << p1 << endl;
    }
    friend ostream & operator << (ostream &out, Parent & e1);
     
public:
    T p1;
};
ostream & operator<<(ostream &out, Parent<int> & e1)
{
    out << e1.p1;
    return out;
}
template <typename U>
class Child : public  Parent <U>//这里的<>在parent前后都可以
{
public:
    Child(U c1, U tem) :Parent<U> (tem)
    {
        this->c1 = c1;
        //this->p1 = tem;
    }
    void printC()
    {
        //这个是傻子,你给p1赋值为tem,tem相当于一个字面量,怎么可以输出一个字面量呢?昨晚肯定晕了。
        //cout << " c1 = " << c1 << " tem = " << tem << endl;//不理解这里为什么会出现错误?
        cout << " c1 = " << c1 << " p1 = " << p1 << endl;
         
    }
private:
    U c1;
     
};
 
class B :public Parent<int>
{
public:
    B(int b1, int p) :Parent<int>(p)
    {
        this->b1 = b1;
    }
    void printB()
    {
        cout << " b1 = " << b1 << " p1 = " << p1 << endl;
    }
private:
    int b1;
 
};
class Test
{
public:
    Test(int t1)
    {
        this->t1 = t1;
    }
    void printT()
    {
        cout << t1 << endl;
    }
public:
    int t1;
};
int main()
{
    Child<int> h1(1, 3);
    cout<<h1.p1;
    h1.printC();
    h1.printP();
    cout << " 我是漂亮的分割线\n";
    B b1(2,5);
    cout<<b1.p1;
    b1.printB();
    b1.printP();
    cout << " 我是漂亮的分割线\n";
    Parent <char> a1('d');
    a1.printP();
    cout << " 我是漂亮的分割线\n";
    Test t(2);
    cout<<t.t1;
    system("pause");
 
}

  

posted @   小陈同学啦  阅读(491)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示