编写一个类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>
#include<iostream>
using namespace std;
class Class15_1{
int value;
public:
static int staticV;
Class15_1(int a){
value=a;
staticV+=1;
}
void show(){
cout<<value<<endl;
cout<<staticV<<endl;
}
~Class15_1(){
staticV-=1;
}
};
Class15_1::staticV=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;
}
int Class15_1::staticV = 0;
Class15_1() = default;
p[0] = Class15_1(5);
delete[] p;
四个问题:
第一,非const静态类staticV在类外部是声明和赋值,不能少int
第二,当声明一个非默认构造函数,如果不继续声明默认构造函数,就禁用默认构造函数,没有默认构造函数就不能new类的数组,因为无法初始化。
第三,没有Class15_1.Class15_1(int n)这种用法,但可以赋值。
第四,delete数组要加 [ ]
delete p 改成delete[] p
要不改成:
class Class15_1{
int value;
public:
static int staticV;
Class15_1(int a){
value=a;
staticV+=1;
}
void show(){
cout<<value<<endl;
cout<<staticV<<endl;
}
~Class15_1(){
staticV-=1;
}
};
int Class15_1::staticV=0;
int main(){
Class15_1* p0=new Class15_1(5);
Class15_1* p1=new Class15_1(80);
Class15_1* p2=new Class15_1(20);
p0->show();
p1->show();
p2->show();
delete p0;
delete p1;
delete p2;
}
要不改成:
class Class15_1{
int value;
public:
static int staticV;
void setVal(int a){
value=a;
staticV+=1;
}
void show(){
cout<<value<<endl;
cout<<staticV<<endl;
}
~Class15_1(){
staticV-=1;
}
};
int Class15_1::staticV=0;
int main(){
Class15_1* p=new Class15_1[3];
p[0].setVal(5);
p[1].setVal(80);
p[2].setVal(20);
p[0].show();
p[1].show();
p[2].show();
delete []p;
}
你至少把报错发出来吧