关于模版子类初始化模版父类,调用父类成员问题(解决)以及运算符重载什么时候用
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" ); } |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步