c++笔记3-构造与析构
来源:互联网 发布:大数据时代安全挑战 编辑:程序博客网 时间:2024/05/17 06:38
1.构造函数:一般用于对变量初始化
C++中的类可以定义与类名相同的特殊成员函数
这种与类名相同的成员函数叫做构造函数
构造函数在定义时可以有参数,但是没有任何返回类型的声明
一般情况下C++编译器会自动调用构造函数,在一些情况下则需要手工调用构造函数
两个特殊的构造函数
无参构造函数:当类中没有定义构造函数时,编译器默认提供一个无参构造函数,并且其函数体为空
拷贝构造函数:当类中没有定义拷贝构造函数时,编译器默认提供一个拷贝构造函数,简单的进行成员变量的值复制
例:
Array.h:
class Array
{
private:
int mLength;//数组长度
int* mSpace;
public:
Array(int length);//构造函数
Array(const Array& obj);//拷贝构造函数
int length();
void setData(int index, int value);
int getData(int index);
~Array();
};
Array.cpp
Array::Array(int length)
{
if(length < 0)
{
length = 0;
}
mLength = length;
mSpace = new int[mLength];
}
Array::Array(const Array& obj)
{
mLength = obj.mLength;
mSpace = new int[mLength];
for(int i=0;i<mLength;i++)
{
mSpace[i] = obj.mSpace[i];
}
}
2.C++中提供了初始化列表对成员变量进行初始化
语法规则:
Constructor::Contructor() : m1(v1), m2(v1,v2), m3(v3)
{
// some other assignment operation
}
注意:
成员变量的初始化顺序与声明的顺序相关,与在初始化列表中的顺序无关
初始化列表先于构造函数的函数体执行
例;#include <stdio.h>
class M
{
private:
int mI;
public:
M(int i)
{
printf("M(int i), i = %d\n", i);
mI = i;
}
int getI()
{
return mI;
}
};
class Test
{
private:
const int c;
M m1;
M m2;
public:
Test() : c(1), m2(3), m1(2)
{
printf("Test()\n");
}
void print()
{
printf("c = %d, m1.mI = %d, m2.mI = %d\n", c, m1.getI(), m2.getI());
}
};
void run()
{
Test t1;
t1.print();
}
int main()
{
run();
printf("Press any key to continue...");
getchar();
return 0;
}
3.类中的const
类中的const成员是肯定会被分配空间的
类中的const成员变量只是一个只读变量
编译器无法直接得到const成员变量的初始值,因此无法进入符号表成为真正意义上的常量。
4.析构函数:
C++中的类可以定义一个特殊的成员函数清理对象
定义:~ClassName()
析构函数没有参数也没有任何返回类型的声明
析构函数在对象销毁时自动被调用
析构函数是对象所使用的资源及时释放的保障
析构函数的调用秩序与构造函数相反
Array::~Array()
{
mLength = -1;
delete[] mSpace;
}
- c++笔记3-构造与析构
- 【零起点学通C++】构造函数与默认构造函数的代码及析构函数的相关笔记
- c++-构造函数与析构函数
- C++--构造函数与析构函数
- [C++]继承与构造析构
- 【c++】构造函数与析构函数
- C++:构造函数与析构函数
- C++学习笔记11 构造函数与析构函数
- (未完)【C/C++】对象的构造与析构
- 【C++】初始化与清除(构造函数与析构函数)
- 【C++】【学习笔记】【015】构造和析构
- 高质量C/C++编程指南 阅读笔记(四)类的构造函数、析构函数与赋值函数
- [C++]构造函数与析构函数讲解
- 构造方法与c中的析构方法
- 构造函数与析构函数(C++)
- C语言的构造函数与析构函数
- C++_构造函数与析构函数
- C++——glibc全局构造与析构
- 20170725 用Jquery修改CSS
- 自举电路、自举电容
- Uart串口实验
- API学习List接口
- 进程之间与线程之间的通信
- c++笔记3-构造与析构
- myeclipse启动tomcat程序爆内存溢出的心得
- win10+anaconda+tensorflow+keras环境搭建教程(CPU版)
- html注释 和css注释的区别
- 【JAVA】CXF+Spring上的webservice
- API学习Vector类
- 2017 Multi-University Training Contest
- CodeForcesPetya and Exam
- 整理:Visual Studio Code (vscode) 配置C、C++环境/编写运行C、C++(Windows)