C++类模版1

发布于:2025-07-13 ⋅ 阅读:(15) ⋅ 点赞:(0)

类模版作用:

  • 建立一个通用类,类中的成员,数据结构可以不具体制定,用一个虚拟的类型来代表

语法:

template<typename T>
类
#include <iostream>
using namespace std;

//类模版
template<typename NameType,typename AgeType>
class Person{
    public:
    //构造函数
          Person(NameType name,AgeType age)
          {
            this->m_Name=name;
            this->m_Age=age;
          }
    void showPerson()
    {
        cout<<"name: "<<this->m_Name<<endl;
        cout<<"age: "<<this->m_Age<<endl;
    }

//但是这两个类型是不一样的,要是这两个类型是一样的,只用一个T就够了
    NameType m_Name;
    AgeType m_Age;

};

void test01()
{
    //类模版的使用
    //<>表示的是模版的参数列表
    Person<string,int> p1("孙悟空",999);
    p1.showPerson();
}

int main()
{
    test01();
    return 0;
}

类模版与函数模版语法相似,在声明模版template后面加类,此类称为类模版。

类模版与函数模版区别

1.类模版没有自动类型推导的使用方式

2.类模版在模版参数列表中可以有默认参数

类模版中的成员函数创建时机

  • 普通类中的成员函数一开始就可以创建
  • 类模版中的成员函数在调用时才创建
#include <iostream>
using namespace std;

class Person1{
    public:
        void showPerson1(){
            cout<<"Person1 show"<<endl;
        }
};

class Person2{
    public:
        void showPerson2(){
            cout<<"Person2 show"<<endl;
        }
};

template <typename T>
class MyClass{
    public:
        T obj;
        //类模版中的成员函数
        void func1(){
            obj.showPerson1();
        }
        void showPerson2(){
            obj.showPerson2();
        }
};



int main() {
    
}

为什么这个代码跑得通,因为这两个成员函数,只要没有调用,就不会被创建的,为什么不会被创建。

#include <iostream>
using namespace std;

class Person1{
    public:
        void showPerson1(){
            cout<<"Person1 show"<<endl;
        }
};

class Person2{
    public:
        void showPerson2(){
            cout<<"Person2 show"<<endl;
        }
};

template <typename T>
class MyClass{
    public:
        T obj;
        //类模版中的成员函数
        void func1(){
            obj.showPerson1();
        }
        void func2(){
            obj.showPerson2();
        }
};

void test01(){
    MyClass<Person1> m;
    m.func1(); // 调用 Person1 的成员函数
    m.func2();

}


int main() {
    test01();
    return 0;
    
}

但是下面这个就会出错。

总结:类模版中的成员函数并不是一开始就创建的,在调用时才创建。


网站公告

今日签到

点亮在社区的每一天
去签到