返回信息流#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(){++count;}
~MyClass(){--count;}
static int getCount(){return count;}
private:
static int count;
};
int MyClass::count=0;
int main()
{
MyClass obj;
MyClass a;
cout<<obj.getCount();
cout<<a.getCount();
MyClass *ptr=new MyClass;
cout<<MyClass::getCount();
delete ptr;
cout<<MyClass::getCount();
system("pause");
return 0;
}
输出为什么是:2232而不是1232?谢谢……
但是,如果改成
// C++练习.cpp : Defines the entry point for the console application.
//
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(){++count;}
~MyClass(){--count;}
static int getCount(){return count;}
private:
static int count;
};
int MyClass::count=0;
int main()
{
MyClass obj;
cout<<obj.getCount();
MyClass a;
cout<<a.getCount();
MyClass *ptr=new MyClass;
cout<<MyClass::getCount();
delete ptr;
cout<<MyClass::getCount();
system("pause");
return 0;
}
这样输出就是1232了??为什么呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #47804同步于 2010/12/15
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
初学C++,求解释,谢谢……
heshanshan
2010/12/15镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
创建对象就调用构造函数加1,删除对象析构的时候就-1 了哇
【 在 heshanshan (shanshan2512) 的大作中提到: 】
: #include<iostream>
: using namespace std;
: class MyClass
: ...................
为什么第一种情况在创建MyClass obj;时count的值是1,为啥在cout<<obj.getCount();的时候输出的是2不是1呢?a和obj不同的啊,为什么不是独立的,在加上MyClass a;后cout<<obj.getCount()输出就成了2?还是晕晕乎乎的……谢谢你哈……
【 在 l9861231 的大作中提到: 】
: 创建对象就调用构造函数加1,删除对象析构的时候就-1 了哇
: 【 在 heshanshan (shanshan2512) 的大作中提到: 】
: : #include<iostream>
: ...................
是不是跟他的名字没有关系,不是独立的哇?
【 在 l9861231 的大作中提到: 】
: 创建对象就调用构造函数加1,删除对象析构的时候就-1 了哇
: 【 在 heshanshan (shanshan2512) 的大作中提到: 】
: : #include<iostream>
: ...................
#include<iostream>
using namespace std;
class MyClass
{
public:
MyClass(){++count;}
~MyClass(){--count;}
static int getCount(){return count;}
private:
static int count;
};
int MyClass::count=0;
int main()
{
MyClass obj; //创建对象,调用构造函数,count=1
MyClass a; //创建对象,调用构造函数,count=2
cout<<obj.getCount(); //count为静态成员,它是与类关联而不是与该类的对象关联,此处输出2
cout<<a.getCount(); //此处也输出2
MyClass *ptr=new MyClass; //创建对象,调用构造函数,count=3
cout<<MyClass::getCount(); //此处输出3
delete ptr; //调用析构函数,count减1
cout<<MyClass::getCount(); //此处输出2
system("pause");
return 0;
}
因为是静态成员变量哇,就是对象之间共享的哇。。。
【 在 heshanshan (shanshan2512) 的大作中提到: 】
: 是不是跟他的名字没有关系,不是独立的哇?
哦,用乱号了
【 在 GTQ (『热情一顶乐团』副团长|【回帖终结者A2】) 的大作中提到: 】
: 因为是静态成员变量哇,就是对象之间共享的哇。。。
哦哦,晓得了……非常感谢……
那个……我还想罗嗦下,如果不用静态成员函数,就用一般的,输出时输出1232,要在这个基础上怎么改啊,我改了好多次都编译不过……
【 在 l9861231 的大作中提到: 】
: 哦,用乱号了
: 【 在 GTQ (『热情一顶乐团』副团长|【回帖终结者A2】) 的大作中提到: 】
: : 因为是静态成员变量哇,就是对象之间共享的哇。。。
: ...................
(count为静态成员,它是与类关联而不是与该类的对象关联,此处输出2)谢谢你啊,我明白了……静态成员是数据共享的哇,谢啦:)
【 在 onlyff 的大作中提到: 】
: #include<iostream>
: using namespace std;
: class MyClass
: ...................
呃。那你申请个全局变量吧
【 在 heshanshan (shanshan2512) 的大作中提到: 】
: 哦哦,晓得了……非常感谢……
: 那个……我还想罗嗦下,如果不用静态成员函数,就用一般的,输出时输出1232,要在这个基础上怎么改啊,我改了好多次都编译不过……