偷偷写代码 2021-09-06 09:51 采纳率: 100%
浏览 61
已结题

c++类的继承创建一个基类的数组

以下是我写的一段源码,主要问题是类strss中的动态创建与继承之间关系的问题,简单来说strs就是一个简单地字符串类,我想用strss继承strs,并动态的创建一个strs类的数组,整个代码的功能:输入整数,再输入相应个数个字符串,判断其是否符合,所有字符串判断完后一次性输出YES或者NO。
代码报错arr不存在。
另外可能有的小伙伴可能知道这个题,会说我题目没读对,我发现了,但是题的问题不难,主要是这个
另外
感谢各位的观看!
c++路上加油!


#include<iostream>
#include<string>
using namespace std;
class strs                     //字符串类 
{
    public:
        string str;            
        int np,nt;            //分别记录PAT的数量,正常来说,PT只含有一个且有序,A无限制  
        bool flag;
        
        strs()                //构造函数 
        {
            cin>>str;
            flag=true;
            np=0;
            nt=0;
            for(int i=0;i<str.size();i++)
            {
                if(str[i]=='P') np++;
                else if(str[i]=='T') nt++;
                else if(str[i]=='A') continue;
                else flag=false;
            }
            cout<<"strs构造函数"<<endl;
        } 
        
        void judgeit()               //判断函数 :判断strs对象的str字符串是否满足条件 
        {
            int nup=0,nut=0;
            if(np==1&&nt==1&&flag)   //P和T智能存在一个 ,flag为true时字符串不含有PAT以外的字符 
            {
                for(int i=0;i<str.size();i++)
                 {
                    if(str[i]=='P') nup=i;
                    else if(str[i]=='T') nut=i;
                     else continue;
                }
               if(nup+1<nut) cout<<"YES"<<endl;
               else cout<<"NO"<<endl;
            }
            else
            cout<<"NO"<<endl;
        }        
};


class strss :public strs      //目的:构建一个strs类的对象的数组,然后通过 创建strss类的对象完成所有创建 
{
    public:
        int nums;
        strss()
        {
            cin>>nums;
            strs *arr=new strs[nums];  
            cout<<"strss构造"<<endl;
        }
};



int main()
{
    strss a1;
    for(int j=0;j<a1.nums;j++)
    {
        a1.arr[j].judgeit();
    }
    return 0;
}

展开全部

  • 写回答

1条回答 默认 最新

  • qfl_sdu 2021-09-06 09:58
    关注

    修改如下:

    class strss :public strs      //目的:构建一个strs类的对象的数组,然后通过 创建strss类的对象完成所有创建 
    {
    public:
        int nums;
        strs* arr;  //这里声明一下
        strss()
        {
            cin>>nums;
            arr=new strs[nums];  //这里去掉类型前缀
            cout<<"strss构造"<<endl;
        }
    };
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    1人已打赏
    qfl_sdu 2021-09-06 10:01

    其实代码是有问题的,类的继承,实例化子类时,先调用父类的构造函数,然后调用子类的构造函数,所以你想要的功能这样是无法实现的,取消继承就可以了。

    1
    回复
    qfl_sdu 回复 qfl_sdu 2021-09-06 10:02

    而且strss也没必要继承strs

    1
    回复
    偷偷写代码 回复 qfl_sdu 2021-09-06 10:31

    好的,谢谢大佬,我仔细钻研钻研
    非常感谢!

    1
    回复
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 已采纳回答 9月6日
  • 创建了问题 9月6日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部