Class
WHAT IS AN OBJECT?
- An Object is an instance of a Class.
- When a class is defined, no memory is allocated but when it is instantiated (i.e. an object is created) memory is allocated.
- A class works as a “blueprint” for creating objects
Constructors
- Overloadable
- Use initializer lists for speedier construction!
1 2 3 4 5
//student.cpp #include student.h Student::Student() : name{“ ”}, age{0}, state{“ ”} {} Student::Student(string name, int age, string state) : name{name}, age{name}, state{state} {}
Template Classes
例子
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
template <typename T>
class Stack {
private:
static const int maxSize = 100;
T elements[maxSize];
int top;
public:
Stack() : top(-1) {}
void push(const T& item) {
if (top < maxSize - 1) {
elements[++top] = item;
} else {
// Handle stack overflow
// 这里可以加入适当的错误处理代码
}
}
T pop() {
if (top >= 0) {
return elements[top--];
} else {
// Handle stack underflow
// 这里可以加入适当的错误处理代码
return T(); // 默认构造一个类型T的对象返回
}
}
bool isEmpty() const {
return top == -1;
}
};
1
2
Stack<int> intStack; // 创建一个存储整数的栈
Stack<double> doubleStack; // 创建一个存储双精度浮点数的栈
bug
-
Templates don’t emit code until instantiated:
- 模板并不在定义时生成代码,而是在实例化(使用)时才生成实际的代码。这是C++模板的一个重要特性,也被称为”模板的延迟实例化”。这意味着编译器只在程序中使用模板的地方生成相应类型的代码,而不是在模板定义的地方生成所有可能的代码。
-
So include the .cpp in the .h instead of the other way around!
-
因为模板在实例化时才生成代码,为了确保在每个使用模板的地方都有相应的实现,一种常见的做法是将模板的实现(定义)放在头文件(.h 文件)中,而不是将实现放在独立的源文件(.cpp 文件)中。
-
换句话说,通常建议将模板的声明和实现都包含在头文件中,以便在编译时能够生成所需的代码。这样做的好处是,当模板被不同的源文件引用时,编译器能够看到模板的定义并生成相应的代码。
-
与普通的非模板类不同,模板的实现通常不会单独编译成目标文件,因为模板的代码在实例化时才生成,而不是在编译实现文件时。 当然,也可以Include vector.cpp in .h文件。
-
本文由作者按照
CC BY 4.0
进行授权