类模板-----定义、调用、做函数参数、派生子类(c++)

类模板的定义、调用、类模板做函数参数

#include
using namespace std;

//类模板定义
template
class person
{
  public:
  person(T a =0)
  {
    this->p = a;
  }
  void show()
  {
    cout<<"p: "< & p0)
{
  p0.show();
}

int main()
{
  //模板类(本身就是类型化的)→具体类→定义具体变量
  person p1(10);  //类模板调用,必须声明参数列表
  person p2(20),p3(30);
  p1.show();
  user(p2);  
  user(p3);  
  return 0;
}

类模板派生普通子类

#include
using namespace std;

//类模板定义
template
class person
{
  public:
  person(T a = 0)
  {
    cout<<"person 构造函数"<p = a;
  }
  void show()
  {
    cout<<"p: "<
{
  public:
  //需显示将父类构造函数告知c++编译器如何调用;使用初始化列表
   //以a为形参,调用person构造函数,构造一个对象;当实例化student对象时,若有形参传入,则以形参值构造对象;若无具体形参值传入,则以a=11,b=22构造student对象
  student(int a = 11, int b = 22) : person  (a)   
  {
    std::cout << "student 构造函数" << std::endl;
    this->b = b;
  }
  // student(int a, int b = 100) : person  (a)
  // {
  //   std::cout << "22222222" << std::endl;
  //   this->b = b;
  // }
  private:
    int b;
};


int main()
{
  person p4;   //看似默认构造,实则还是调用的有参构造,当有参构造函数传入形参有初始值时,可以这么写
  student s;
  s.show();
  student s1(10000, 1111);
  s1.show();
  //person  (10) 与person  a(10)区别:后者有载体a承接实例化出的对象,前者开辟了这样一个实例化对象大小空间,但是无法对其进行调用,因为没有载体
  //int a(10); 等价 int a = 10;
  //student s1; //在student没有写构造函数情况下,这种写法编译将报错,子类会调用父类构造函数,而父类构造函数是有参构造
  return 0;
}

输出:

类模板-----定义、调用、做函数参数、派生子类(c++)_第1张图片

类模板派生子模板类

子类将继承父类所有的属性和函数;如:子类teacher的构造函数是先执行父类person (p1)构造函数,再执行本身的构造函数

#include
using namespace std;

//类模板定义
template
class person
{
  public:
  person(T a = 0)
  {
    cout<<"person 构造函数"<p = a;
  }
  void show_person()
  {
    cout<<"p: "<
class teacher: public person
{
  public:
  teacher(T b1, T p1) : person (p1)
  {
    cout<<"teacher 构造函数"<b = b1;
  }
  void show_teacher()
  {
    cout<<"b: "< t1(111,222);
  t1.show_person();
  t1.show_teacher();
  return 0;
}

 输出:

你可能感兴趣的:(code测试,c++,算法,开发语言)