面向对象的编程——构造函数和析构函数(1)
2012-04-27 00:12
246 查看
面向对象的编程——构造函数和析构函数(1)
构造函数与类同名我们以此来标识构造函数为了声明一个缺省的构造函数,构造函数上惟一的语法限制是它不能指定返回类型甚至void 也不行,C++语言对于一个类可以声明多少个构造函数没有限制,只要每个构造函数的参数表是惟一的即可。
析构函数是一个特殊的由用户定义的成员函数当该类的对象离开了它的域或者delete表达式应用到一个该类的对象的指针上时析构函数会自动被调用,析构函数的名字是在类名前加上波浪线(~),它不返回任何值,也没有任何参数,因为它不能指定任何参数。所以它也不能被重载。尽管我们可以为一个类定义多个构造函数但是我们只能提供一个析构函数,它将被应用在类的所有对象上。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class B
{
private:
int data;
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(int i):data(i)
{
cout<<"constructed by parameter"<<data<<endl;
}
} ;
B Play(B b)
{
return b;
}
int main(int argc,char* argv[])
{
B temp=Play(5);
return 0;
}
上述程序的运行结果如下:
可以很清楚的看到,调用了一次构造函数,而且是带有参数的那一个,那为什么会这样呢?对此,我们有好几个疑问,第一,为什么在“B temp ”这里没有调用?第二,在”Play(5)”这是怎么调用构造函数的?
也可以看到,析构函数调用了两次,一次是“Play(5)”返回时,参数的析构函数被调用;第二次是temp的析构函数调用;temp的构造函数调用的其实是编译器生成的拷贝构造函数。
构造函数与类同名我们以此来标识构造函数为了声明一个缺省的构造函数,构造函数上惟一的语法限制是它不能指定返回类型甚至void 也不行,C++语言对于一个类可以声明多少个构造函数没有限制,只要每个构造函数的参数表是惟一的即可。
析构函数是一个特殊的由用户定义的成员函数当该类的对象离开了它的域或者delete表达式应用到一个该类的对象的指针上时析构函数会自动被调用,析构函数的名字是在类名前加上波浪线(~),它不返回任何值,也没有任何参数,因为它不能指定任何参数。所以它也不能被重载。尽管我们可以为一个类定义多个构造函数但是我们只能提供一个析构函数,它将被应用在类的所有对象上。
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class B
{
private:
int data;
public:
B()
{
cout<<"default constructor"<<endl;
}
~B()
{
cout<<"destructed"<<endl;
}
B(int i):data(i)
{
cout<<"constructed by parameter"<<data<<endl;
}
} ;
B Play(B b)
{
return b;
}
int main(int argc,char* argv[])
{
B temp=Play(5);
return 0;
}
上述程序的运行结果如下:
可以很清楚的看到,调用了一次构造函数,而且是带有参数的那一个,那为什么会这样呢?对此,我们有好几个疑问,第一,为什么在“B temp ”这里没有调用?第二,在”Play(5)”这是怎么调用构造函数的?
也可以看到,析构函数调用了两次,一次是“Play(5)”返回时,参数的析构函数被调用;第二次是temp的析构函数调用;temp的构造函数调用的其实是编译器生成的拷贝构造函数。
相关文章推荐
- 面向对象的编程——构造函数和析构函数(2)
- 2016/3/21 面向对象: ①定义类 ②实例化对象 ③$this关键字 ④构造函数 ⑤析构函数 ⑥封装 ⑦继承
- 天轰穿C# -vs2010 - 04面向对象的编程之构造函数【原创】
- 面向对象——构造函数与析构函数(多语言比较——整合自网络)
- 派生类的构造函数和析构函数(C++面向对象)
- 面向对象OOP–构造函数和析构函数
- 高质量C++/C编程指南 - 第9章 类的构造函数、析构函数与赋值函数
- 面向对象——构造函数与析构函数(多语言比较——整合自网络)
- 面向对象之构造函数和析构函数之三
- 自主编程实现String类的构造函数,析构函数,拷贝构造函数,赋值函数
- 第九章 高质量C编程规范类的构造函数、析构函数与赋值函数
- 天轰穿C# -vs2010 - 04面向对象的编程之构造函数之间的调用【原创】
- 【面向对象】php新手之学习类与对象-构造函数与析构函数
- php面向对象之构造函数和析构函数
- 高质量C++/C编程指南 -- 第9章 类的构造函数、析构函数与赋值
- PHP面向对象——构造函数、析构函数
- 第四章 基于对象的编程风格(什么是构造函数和析构函数)
- 高质量C++/C编程指南 -- 第9章 类的构造函数、析构函数与赋值函数
- 面向对象:构造函数,析构函数
- 高质量C++/C编程指南 -- 第9章 类的构造函数、析构函数与赋值函数