C++ ,类的构造函数写成模板函数,应该如何调用?

2025-04-13 07:23:23
推荐回答(5个)
回答1:

在使用的时候创建个A类的实体 b b.A()就可以调用了

你问的问题很基础啊。

class A
{
template A();
} 这段是你构造一个类

template A::A(){}这段是你在资源文件里面编写A类A()方法

你要用A()方法

就先实体化一个A类对象出来

A b
在调用b.A();
关于new是要求计算机重新创建一个A类的对象就是一段储存空间要用指针把地址保存好
如 A *point1, *point2;
point1 = new A;
point2 = new A;
point1.A();point2.A();
如果你不想用new创建出来的空间了(删除)就
free(point1);
point1=null;
或者 delete point1;
如果想2个指针都指向空一个空间就
point1=point2;
注意当你转移指针时保证至少要一个指针还指向new出来的空间,不然你就要删除他,不然在某些循环中当你没有及时释放内存就会爆满。

template定义出来的对象跟普通方式定义出来的对象只有在调用时根据实参数据类型来确定数据类型的变量。省得写一堆重复的重载。

回答2:

所谓函数模板实际上是建立一个通用函数,其涵涵素类型额形参类型不具体指定,用一个虚拟的类型来代表,这个通用函数就称为函数模板。

调用代码:

#include 
using namespace std;
class A
{
public:
 template  void A1(T temp);
 template  A(T temp);
 
};
template 
void A::A1(T temp)
{
 cout<}
template 
A::A(T temp)
{
 cout<}
template 
void test(T temp)
{
 cout<}
 
void main()
{
 test(12);  //普通模板函数
 A aa(12); //请注意这一行
 aa.A1(15); //成员函数是模板函数
 
}

回答3:

构造函数不用显式调用的。

A temp;

如果上面这样产生对象,计算机就会调用你的那个构造函数了。

回答4:

class B
{
public:
        template
        B(const T& t);
};

template
B::B(const T& t)
{
    std::cout << typeid(T).name()<}

B* p = new B(10);
delete p;
p = new B(11.2);
delete p;

默认构造不能加template 写是没问题,调用的时候你就郁闷了

回答5:

这样子写的目的是禁用默认构造函数,只能通过其它的方式去创建A的实例。但是一般是通过把默认构造函数私有化来禁用,这样子写会让人觉得很奇怪