是不是实用了模板之后,C++的类在定义带参数的构造函数时,不一定要定义不带参数的构造函数?
如上,我发现使用了模板之后,竟然可以不用定义不带参数的构造函数,倘若是在平时,一定会出现编译错误,说找不到合适的默认构造函数。为什么?楼下的,不要这样好吧...乱回答.....
如上,我发现使用了模板之后,竟然可以不用定义不带参数的构造函数,倘若是在平时,一定会出现编译错误,说找不到合适的默认构造函数。为什么?
楼下的,不要这样好吧...乱回答....我问的是模板....真郁闷....
不知二楼的在讲什么....乱七八糟.... 展开
楼下的,不要这样好吧...乱回答....我问的是模板....真郁闷....
不知二楼的在讲什么....乱七八糟.... 展开
1个回答
展开全部
不管是模板类还是普通的类,如果你没有定义带参数的构造函数,那么编译器会为你隐含的实现一个没有参数的默认构造函数(这个默认构造函数什么都不做),但如果你定义了一个带参数的构造函数,编译器就不再为你创建一个默认的构造函数了,先拿普通的类来说:
#include <iostream>
using namespace std;
class CTest
{
public:
CTest(int val)
{
m_nVal = val;
}
private:
int m_nVal;
};
int main()
{
CTest test(8);
}
编译运行都没有问题,但是如果你写成CTest test;就不行了,没有默认构造函数了。模板类是一样的道理,所以问题不在这里,如下程序同样编译运行通过:
#include <iostream>
using namespace std;
template<typename T>
class CTest
{
public:
CTest(T val)
{
m_nVal = val;
}
private:
T m_nVal;
};
int main()
{
CTest<int> test(7);
}
但是如果你写CTest<int> test是不行的,编译不通过。
#include <iostream>
using namespace std;
class CTest
{
public:
CTest(int val)
{
m_nVal = val;
}
private:
int m_nVal;
};
int main()
{
CTest test(8);
}
编译运行都没有问题,但是如果你写成CTest test;就不行了,没有默认构造函数了。模板类是一样的道理,所以问题不在这里,如下程序同样编译运行通过:
#include <iostream>
using namespace std;
template<typename T>
class CTest
{
public:
CTest(T val)
{
m_nVal = val;
}
private:
T m_nVal;
};
int main()
{
CTest<int> test(7);
}
但是如果你写CTest<int> test是不行的,编译不通过。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询