【C++第五课】---析构与构析上
来源:互联网 发布:p2p网络借贷监管政策 编辑:程序博客网 时间:2024/06/08 20:07
在C++中,一般定义一个对象之后,我们最好是能够将其初始化,使他有一个确定的初始状态,这样能避免很多不确定因素,那么在C++中是如何做的呢?
这时候就需要引入构造函数的概念了。
一、所谓构造函数
C++中的类可以定义和类名相同的特殊成员函数,这种函数就叫做构造函数。
注意:定义构造函数的时候可以有参数的,但是定义的构造函数不能有返回值的
但是,但是在构造函数中是可以有return语句的。
举个例子:
#include <iostream>using namespace std;class example{public:example(int m){x = y = m;}int print_value(void){cout<<"x = "<<x<<" y = "<<y<<endl;return 0;}private:int x;int y;};int main(int argc,char** argv){example exam1(1);example exam2 = 2;exam1.print_value();exam2.print_value();return 0;}
二、构造函数的调用
1.一般情况下C++编译器会自动构造函数
2.特殊情况下需要手动调用构造函数
举例如下:
#include <iostream>using namespace std;class example{public:example(int m){x = y = m;}int print_value(void){cout<<"x = "<<x<<" y = "<<y<<endl;return 0;}private:int x;int y;};int main(int argc,char** argv){example exam1(1);//自动调用example exam2 = 2;//自动调用example exam3 = example(3);//手动调用exam1.print_value();exam2.print_value();exam3.print_value();return 0;}
四、两个特殊的构造函数
1.无参数构造函数
当类中没有定义构造函数时,,编译器默认提供一个无参 编译器默认提供一个无参
构造函数,,并且其函数体为空。
2.拷贝构造函数
当类中没有定义拷贝构造函数时,,编译器默认提供一个 编译器默认提供一个
拷贝构造函数,,简单的进行成员变量的值复制。不进行空间的开辟
一个实例:数组类的创建
main.cpp
#include <iostream>#include "array.h"using namespace std;int main(int argc, char** argv){ARRAY array1(5);//创建对象,并且初始化对象为5个元素for(int i = 0;i < 5; i ++){array1.Set_Data(i,-i); //给数组赋值}for(int i = 0; i < 5; i ++){cout<<"i = "<<array1.Get_Data(i)<<endl;//打印数组的值}Destroy();//释放内存return 0;}
array.cpp
#include "array.h"ARRAY::ARRAY(int length){if(length < 0){length = 0;}m_length = length;m_space = new int[m_length];}ARRAY::ARRAY(const ARRAY& obj){m_length = obj.m_length;m_space = new int[m_length];for(int i = 0;i < m_length;i ++){m_space[i] = obj.m_space[i];}}int ARRAY::Get_Data(int index){return m_space[index];}void ARRAY::Set_Data(int index,int value){m_space[index] = value;}int ARRAY::Length(){return m_length;}void ARRAY::Destroy(){m_length = -1;delete[] m_space;}
array.h
#ifndef __ARRAY_H_#define __ARRAY_H_class ARRAY{public:ARRAY(int length);ARRAY(const ARRAY& obj);int Get_Data(int index);void Set_Data(int index,int value);int Length();void Destroy();private:int m_length;int* m_space;};#endif
- 【C++第五课】---析构与构析上
- C语言第五课
- Linux C 第五课
- C++--第五课-继承
- C语言第五课
- 《C陷阱与缺陷》 第五章 库函数
- 第五讲:c/c++数组与指针
- C#教程第五课:方法
- C#教程第五课:方法
- C语言第五课练习
- C++--第五课补充-继承
- 第五课、 C基本语法
- 数据结构与算法 第五课
- C语言之路 第五章 函数与指针
- 【笔记】C与指针 第五章 操作符和表达式
- C语言第五讲(ArrayPro二维与多维数组)
- C语言第五堂课作业
- 小小君的C语言第五课
- 【大数据挖掘学习-2】关联规则挖掘
- ShowWindow后面UpdateWindow的作用
- 马士兵strusts笔记解析
- tutorial exploitation format string
- Linux X Window设定介绍
- 【C++第五课】---析构与构析上
- 并查集LA3027
- USACO: 1.1.1 Your Ride Is Here (ride) 解析!
- 有关apt-get install安装vim出现的问题
- CSS学习笔记--第一章
- 数组指针、指针数组、指针函数、函数指针比较
- Java中堆内存和栈内存的区别
- 单链表操作(单链表)
- Oracle DB进程体系结构