【发布时间】:2021-10-25 18:03:34
【问题描述】:
请看以下代码:
// templateClassTemplate.cpp
#include <iostream>
class Account{
public:
explicit Account(double amount=0.0): balance(amount){}
void deposit(double amount){
balance+= amount;
}
void withdraw(double amount){
balance-= amount;
}
double getBalance() const{
return balance;
}
private:
double balance;
};
template <typename T, int N>
class Array{
public:
Array()= default;
int getSize() const;
private:
T elem[N];
};
template <typename T, int N>
int Array<T,N>::getSize() const {
return N;
}
int main(){
std::cout << std::endl;
Array<double,10> doubleArray;
std::cout << "doubleArray.getSize(): " << doubleArray.getSize() << std::endl;
Array<Account,1000> accountArray;
std::cout << "accountArray.getSize(): " << accountArray.getSize() << std::endl;
std::cout << std::endl;
}
此代码取自模板初始化学习课程。
我有两个问题:
-
Array<double,10> doubleArray对象使用的是不带参数的默认构造函数,它是如何初始化的? -
对象
Array<Account,1000> accountArray是如何初始化的?
【问题讨论】:
-
你从哪里得到的代码?请注意,例如 getSize() 可以是 constexpr。此外,使用浮点类型来赚钱需要非常小心,从这里的情况来看,在这方面没有考虑过。使用“美分”并使用整数类型。
-
“对象是如何初始化的?”。原谅我,但“如何”这个词感觉相当含糊。您是在问初始化对象持有什么值吗?你是在问什么代码被执行?您是在问 C++ 的哪些规则决定了初始化步骤?还是别的什么?
-
@DrewDormann - 例如,什么代码/机制将模板参数分配给它们各自的对象?我可以看到 Array
doubleArray 正在制作一个包含 10 个双精度数的数组,但是 C++ 是如何做到这一点的呢?通过常规对象的实例化,将调用类构造函数,可能会使用列表成员分配。 -
@Bathsheba - 代码是一个简单的模板初始化示例,取自在线课程 - education.io。除了演示之外,代码永远不会用于任何目的。
-
我不确定,但我现在怀疑这个问题是关于模板实例化。类模板不是类,而是类模板在实例化时创建的。
标签: c++ c++11 templates constructor