码迷,mamicode.com
首页 > 其他好文 > 详细

构造和析构

时间:2016-02-10 13:09:46      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:

#include <iostream>
using namespace std;

class F
{
int n;
int d;
public:
F(int n = 0,int d = 1);
void print(bool newline = true);
void print(bool newline = true)const; //相同参数表也可以重载.
//这个地方加const表示这个函数里面,当前对象是只读的.
void input();
~F(); //只有程序在尾声的时候调用.
};
void F::print(bool newline)const //这个函数不太自由,使用起来有限制.
{
cout << "(只读的)" << n << ‘/‘ << d;
if(newline) cout << endl;
}
F::~F()
{
cout << this << ",~F()" << n << ‘/‘ << d << endl;
}
F::F(int n,int d):n(n),d(d)
{
cout << this << ",F(" << n << ‘,‘ << d << ")\n"; //这里的this打印的是地址.
}
void F::print(bool newline) //一般调用自由的,什么时候调用非自由的?
{
cout << "(自由的)"<< n << ‘/‘ << d;
if(newline) cout << endl;
}

int compare(const F& x,const F& y) //引用的时候可能会改掉x和y的值,如果不做修改只能加const.
{
x.print();y.print(); //这个时候没有创建新的对象,不用再调用构造和析构函数.
return 0;
}
int main()
{
F* q = static_cast<F*>(malloc(sizeof(F))); //不会调用构造
F* p = new F;
F a(1,2);
F b(3,4);
delete p;
p = NULL;
a.print();
b.print();
free(q); //不会调用析构函数
q = new F[4];
for(int i = 0;i < 4;i++) //从下标0开始创建,一个对象8个字节,放的是分子和分母
q[i].print(false);
cout << endl;
delete[] q; //释放的顺序和创建的顺序相反.而用new创建的对象,什么时候delete什么时候就释放
p = new F(8,15); //指定初始值
delete p; p = NULL;
const F c(5,6); //只读的对象,只能调用const函数.
c.print();
cout << "=======================" << endl;
compare(a,b);
cout << "=======================" << endl;
}


//构造函数可以重载,而析构函数不可以重载.析构函数不能传递参数,析构函数总是无参的.
//成员函数中,末尾有const和没有const也构成重载,而常对象只能调用有const的常函数.

构造和析构

标签:

原文地址:http://www.cnblogs.com/dreamgym/p/5185917.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!