关于静态成员的练习,我的代码哪里错了

编写一个类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;
}

你至少把报错发出来吧