标签:dash mil 学习 mem microsoft turn 提示 混淆 soft
带有参数的构造函数(可以使每个对象有不同的初始化状态)
构造函数可以根据需要定义参数
一个类中可以存在多个重载的构造函数
构造函数的重载遵循C++重载的规则
class Test
{
public:
Test(int v)
{
//use v to initialize member
}
}
友情提示
对象定义和对象声明不同
对象定义——申请对象的空间并调用构造函数
对象声明——告诉编译器存在这样一个对象
Test t; //定义对象并调用构造函数
int main()
{
//告诉编译器存在名为t 的Test对象
extern Test t;
return 0;
}
构造函数的自动调用
class Test
{
public:
Test() { }
Test(int v) { }
};
int main
{
Test t; //调用Test()
Test t1(1); //调用Test(int v)
Test t2 = 1; //调用Test(int v)
return 0;
}
Test t1(1)解析:
定义一个Test 对象,名字为t1。圆括号里面有个立即数1,看上去很像函数调用。其实它用来告诉编译器
要调用带有参数的构造函数,调用哪个带有参数的构造函数呢?这时候就需要利用重载的规则了。
立即数1的类型为int,所以就告诉编译器所要调用的构造函数,它只有一个参数,并且参数的类型为int.在这个地方就是Test(int v)
1 #include <stdio.h>
2
3 class Test
4 {
5 public:
6 Test()
7 {
8 printf("Test()\n");
9 }
10 Test(int v)
11 {
12 printf("Test(int v), v = %d\n", v);
13 }
14 };
15
16 int main()
17 {
18 Test t; // 调用 Test()
19 Test t1(1); // 调用 Test(int v)
20 Test t2 = 2; // 调用 Test(int v)
21
22 int i(100); //用100来初始化i。相当于int i =100;
23
24 printf("i = %d\n", i);
25
26 return 0;
27 }
注意:
Test t2 = 2; //用2来初始化t2
int i = 1; //用1对变量就进行初始化
i = 2; //用2对变量i进行赋值
以前在学习C语言时,初始化和赋值好像没有什么差别,于是就将赋值和初始化混淆了。
在C语言中,两者貌似差距很小。但是在C++中,两者之间的差异很大。原因是初始化会调用构造函数。
一定要记住,初始化会调用构造函数,赋值时调用的就不是构造函数了。赋值的时候究竟发生了什么?以后再说。
标签:dash mil 学习 mem microsoft turn 提示 混淆 soft
原文地址:https://www.cnblogs.com/-glb/p/11762176.html