编写一个类Class15_1,声明一个数据成员int value和一个静态数据成员int staticV(初始化为0),让构造函数初始化数据成员value,并让静态数据成员staticV加1,让析构函数把静态数据成员staticV减1。主程序中使用new操作符创建三个堆对象,value值分别为5,80,20。然后显示它们的数据成员和静态数据成员,再依次使用delete操作符析构每个对象,并显示对静态数据成员的影响。
输入无输出5
80
20
3
2
1
0
#include<bits/stdc++.h>
using namespace std;
class Class15_1{
int value;
int static staticV;
public:
Class15_1(int a){
value=a;
staticV+=1;
}
void show(){
cout<<value<<endl;
cout<<staticV<<endl;
}
~Class15_1(){
staticV-=1;
}
};
int main(){
Class15_1* p=new Class15_1[3];
p[0]->Class15_1(5);
p[1]->Class15_1(80);
p[2]->Class15_1(20);
p[0]->show();
p[1]->show();
p[2]->show();
delete p;
}
修改如下,供参考:
#include <iostream>
//#include<bits/stdc++.h>
using namespace std;
class Class15_1{
int value;
int static staticV; //声明但未定义,还未分配内存
public:
Class15_1(int a){
value=a;
staticV+=1;
}
void show(){
cout<<value<<endl;
cout<<staticV<<endl;
}
~Class15_1(){
staticV-=1;
show();
}
};
int Class15_1::staticV = 0;//静态成员变量,初始化。
int main(){
//Class15_1* p = new Class15_1[3];
Class15_1* p1 = new Class15_1(5);
Class15_1* p2 = new Class15_1(80);
Class15_1* p3 = new Class15_1(20);
//p[0]->Class15_1(5);
//p[1]->Class15_1(80);
//p[2]->Class15_1(20);
p1->show();//p[0]->show();
p2->show();//p[1]->show();
p3->show();//p[2]->show();
cout<<endl<<"delete"<<endl;
delete p1;
p1=NULL;
delete p2;
p2=NULL;
delete p3;
p3=NULL;
return 0;
}
或是这样写,更符合题意:
#include <iostream>
//#include<bits/stdc++.h>
using namespace std;
class Class15_1{
int value;
int static staticV; //声明但未定义,还未分配内存
public:
Class15_1(int a){
value=a;
staticV+=1;
}
void show(){
cout<<value<<endl;
cout<<staticV<<endl;
}
~Class15_1(){
staticV-=1;
show();
}
};
int Class15_1::staticV = 0;//静态成员变量,初始化。
int main(){
//Class15_1* p = new Class15_1[3];
Class15_1* p1 = new Class15_1(5);
p1->show();
Class15_1* p2 = new Class15_1(80);
p2->show();
Class15_1* p3 = new Class15_1(20);
p3->show();
//p[0]->Class15_1(5);
//p[1]->Class15_1(80);
//p[2]->Class15_1(20);
//p[0]->show();
//p[1]->show();
//p[2]->show();
cout<<endl<<"delete"<<endl;
delete p1;
p1=NULL;
delete p2;
p2=NULL;
delete p3;
p3=NULL;
return 0;
}
你把编译错误贴出来呀
main函数中需要加上 return 0;
int main(){
Class15_1* p=new Class15_1[3];
p[0]->Class15_1(5);
p[1]->Class15_1(80);
p[2]->Class15_1(20);
p[0]->show();
p[1]->show();
p[2]->show();
delete p;
return 0;
}