#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”: 未声明的标识符
#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;//不理解这里为什么会出现错误?
还是存在疑问,这里什么时候能够直接调用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");
}
#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");
}