各位大虾,帮我看看下面这道C++的题,谢啦 (我想知道它哪里出错了,看它输出来的结果感觉不对劲啊)
#include<iostream>usingnamespacestd;classCX{private:staticintcount;public:CX(){cout<<...
#include <iostream>
using namespace std;
class CX
{
private:
static int count;
public:
CX()
{
cout<<"Constructor called"<<endl;
count++;
}
~CX()
{
cout<<"Destructor called"<<endl;
count--;
}
static int getCount()
{
return count;
}
};
int CX::count=0;
int main()
{
CX a,b=a,c;
c=b;
cout<<"There are "<<CX::getCount()<<"object(s)"<<endl;
return 0;
}
一楼的看看下面道题和这道题的区别,谢啦(上面 这道题书上说是有错的)
(我的问题主要在于构造函数和析构函数的调用上)
(为什么下面这道题注释1出赋值语句的结束后会立刻调用两个析构函数呢?)
(我会给分的啦,谢啊!)
#include<iostream.h>
#include<string.h>
class abc{
public:
abc(){cout<<"构造函数执行\n";}
~abc(){cout<<"析构函数执行\n";}
abc(const abc& obj)
{
cout<<"拷贝构造函数执行\n";
}
};
abc fun(abc obj){return obj;}
void main()
{
abc obj1,obj2;//注释2、在函数结束时再析构
cout<<"1"<<endl;
obj2=fun(obj1);//注释1:会调用两个析构函数
cout<<"2"<<endl;
obj1=fun(obj2);
cout<<"3"<<endl;
abc obj3;
} 展开
using namespace std;
class CX
{
private:
static int count;
public:
CX()
{
cout<<"Constructor called"<<endl;
count++;
}
~CX()
{
cout<<"Destructor called"<<endl;
count--;
}
static int getCount()
{
return count;
}
};
int CX::count=0;
int main()
{
CX a,b=a,c;
c=b;
cout<<"There are "<<CX::getCount()<<"object(s)"<<endl;
return 0;
}
一楼的看看下面道题和这道题的区别,谢啦(上面 这道题书上说是有错的)
(我的问题主要在于构造函数和析构函数的调用上)
(为什么下面这道题注释1出赋值语句的结束后会立刻调用两个析构函数呢?)
(我会给分的啦,谢啊!)
#include<iostream.h>
#include<string.h>
class abc{
public:
abc(){cout<<"构造函数执行\n";}
~abc(){cout<<"析构函数执行\n";}
abc(const abc& obj)
{
cout<<"拷贝构造函数执行\n";
}
};
abc fun(abc obj){return obj;}
void main()
{
abc obj1,obj2;//注释2、在函数结束时再析构
cout<<"1"<<endl;
obj2=fun(obj1);//注释1:会调用两个析构函数
cout<<"2"<<endl;
obj1=fun(obj2);
cout<<"3"<<endl;
abc obj3;
} 展开
1个回答
展开全部
如果看到的是这个
Constructor called
Constructor called
There are 2object(s)
Destructor called
Destructor called
Destructor called
那就没错 b是拷贝构造函数构造的 没给count + 1
-----
知道你想说什么了x_x
abc & fun(abc obj){return obj;} <- 写成这样就只有一次了。你调用fun的时候返回的那个abc也是一个对象,先析构的是原来的obj2,然后给obj2赋值,最后还得把那个中间的对象也析构了。
Constructor called
Constructor called
There are 2object(s)
Destructor called
Destructor called
Destructor called
那就没错 b是拷贝构造函数构造的 没给count + 1
-----
知道你想说什么了x_x
abc & fun(abc obj){return obj;} <- 写成这样就只有一次了。你调用fun的时候返回的那个abc也是一个对象,先析构的是原来的obj2,然后给obj2赋值,最后还得把那个中间的对象也析构了。
来自:求助得到的回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询