<C++>11.构造函数
来源:互联网 发布:linux网络运维 编辑:程序博客网 时间:2024/06/07 12:21
11.构造函数
一、概述
当声明一个类对象时,编译程序需要为对象分配存储空间,为数据成员赋初值,即进行必要的初始化。但是类申明体中不能给数据成员直接赋初值,这就需要利用类的构造函数来初始化类的成员。
构造函数是一种特殊的成员函数,它的主要作用就是为类的对象分配空间,进行初始化。
注意:
1、构造函数的函数名必须与类名相同。
2、构造函数可以有任意类型的参数,但是不能有返回值。
3、构造函数不需要调用,在建立对象时,系统会自动执行。
例:
#include <iostream>using namespace std;// 类class data{public:data();// 声明构造函数void showdata();private:int x, y, z;};// 定义构造函数,不能有返回值data::data(){x=1;y=2;z=3;}void data::showdata(){cout<<x<<endl;cout<<y<<endl;cout<<z<<endl;}int main(void){data getnu;getnu.showdata();return 0;}
结果:
1
2
3
二、采用构造函数给数据成员赋初值的两种形式
1、类名 对象名[(实参表)]
“实参表”是为构造函数提供的实际参数。
例:
#include <iostream>using namespace std;// 类class data{public:data();// 声明构造函数void showdata();private:int x, y, z;};// 定义构造函数,不能有返回值data::data(){x=1;y=2;z=3;}void data::showdata(){cout<<x<<endl;cout<<y<<endl;cout<<z<<endl;}int main(void){data getnu;getnu.showdata();return 0;}
结果:
1
2
3
2、类名 *指针变量名=new类名[(实参表)]
这是使用new运算符动态建立对象的一种方式。
例:
#include <iostream>using namespace std;// 类class data{public:data(int a, int b, int c);// 声明构造函数void showdata();private:int x, y, z;};// 定义构造函数,不能有返回值data::data(int a, int b, int c){x=a;y=b;z=c;}void data::showdata(){cout<<x<<endl;cout<<y<<endl;cout<<z<<endl;}int main(void){data *ptr = new data(1, 2, 3);// 此对象没有名字,称为无名对象,但是此对象有地址,这个地址存放在指针变量ptr中。ptr->showdata();// 使用->符号访问成员函数return 0;}
结果:
1
2
3
编译系统开辟了一段内存空间,并在此空间中存放了一个data类对象,同时调用了该类的构造函数给数据成员赋初值。发表访问应new动态建立的对象一般不用对象名,而是通过指针访问。
三、成员初始化列表
除了上述在构造函数中用赋值语句进行初始化外,还可以用成员初始化列表来实现堆数据成员的初始化。
形式:
类名::构造函数名([参数表])[:(成员初始化列表)]
{
构造函数体
}
成员初始化列表:
数据成员名(初始值), ...
例:
#include <iostream>using namespace std;class data{public:data(int a, int b):x(a), y(b), z(10)// 定义带有成员初始化列表的构造函数{cout<<"我是构造函数!"<<endl;}void show(){cout<<x<<endl;cout<<y<<endl;cout<<z<<endl;}private:int x, y, z;};int main(void){data num(1, 2);// 定义对象并通过成员初始化列表来初始化成员数据num.show();return 0;}
结果:
1
2
10
四、总结说明
1、构造函数名必须与类名相同,否则编译器会把它当作一般函数处理。
2、构造函数没有返回值,在定义构造函数时,不能说明它的类型,即使是void型也不行。
3、与普通的成员函数一样,构造函数的定义既可以写在类内,也可以写在类外。若写在类外,必须声明。若使用默认参数,声明的时候写明默认参数即可,无需在定义的时候写明。
4、构造函数一般声明为公有成员,但是它不能像其它成员函数那样显式调用,它在定义完对象之后被自动调用,而且只执行一次。
5、构造函数既可带参数,也可不带参数。`
- <C++>11.构造函数
- 【C++】拷贝构造函数
- C#:静态构造函数
- C++:拷贝构造函数
- explicit构造函数(C++)
- C++:关于构造函数
- C++-构造函数
- C++String构造函数
- c++-转换构造函数
- c++"拷贝构造函数
- C++: 拷贝构造函数
- object-c 构造函数
- C#构造函数
- objective-c 构造函数
- 【C++】构造函数
- 【C++】explicit构造函数
- 【C++】拷贝构造函数
- C++: 复制构造函数
- Centos7-NFS服务配置实战
- numpy 函数里面的axis参数的含义
- java9在win10下环境变量设置笔记
- 二进制数转化为8421BCD码的C++程序
- 1049. 数列的片段和(20)
- <C++>11.构造函数
- openCV Python 学习笔记(一)图像的基本操作
- python3.X访问mysql,并读取为DataFrame
- 蓝桥杯 算法提高 高精度加法
- 计算机网络:概述
- CLion中使用CMake导入第三方库的方法
- <C++>12.析构函数
- webpack的基本使用
- pair的用法