zoukankan      html  css  js  c++  java
  • 新手初学C++:带有指针型数据成员的类

    作者:finallyly 出处:博客园(注意:转载请注明作者和出处)

    最近打算写一个算法类,算法类中要有一个指针型数据成员,然而该指针型数据成员却不能在构造函数只能够分配堆内存(因为此时我们还不确定数组的维度),只有调用了某个函数之后,方知道动态数组维度,考虑不在类的构造函数中调用确定数组维度的那个函数做如下设想:

    在类的其他其他成员函数中为该指针成员分配堆内存,析构函数中释放该数据成员。问了几个同学和网友后做如下设计:

    该类
    class stringprocess
    {
    public:

        stringprocess(
    void);
        
    ~stringprocess(void);
        
    //int GetLongestCommonSequence(wstring x,wstring y,wstring result);
        void test();
    private:
        
    int *indexes;//声明指向指针的指针,保存两个字符串中的最长公共序列中的字符分别出现的位置。
        wstring xpart;//最大公共字序列的父串之一
        wstring ypart;//
        
     
    };
    该类的构造函数
    stringprocess::stringprocess(void)
    {
        indexes
    =NULL;
    }

    该类的析构函数

    stringprocess::~stringprocess(void)
    {
        
    if (indexes!=NULL)
        {
            cout
    <<"指针成员变量已经被分配了堆内存,需要以delete模式释放"<<endl;    
            delete[] indexes;
            cout
    <<"释放完毕"<<endl;
            
        }
        
    else
        {
            cout
    <<"指针成员变量为被分配堆内存,不需要以delete模式释放"<<endl;
        }
        
        cout
    <<"destructor"<<endl;
    }

    该类中为指针数据成员分配堆内存的成员函数

    为指针数据成员分配堆内存
    void stringprocess::test()
    {
        indexes
    =new int[5];

    }

    主函数中测试调用:

    int _tmain(int argc, _TCHAR* argv[])
    {
        
        
        
        stringprocess p;
        p.test();
        cout
    <<"finish"<<endl;
        
    int f;
        cin
    >>f;
        
    }

    输出结果:

    如果主函数中不调用p的test函数则运行结果如下:

    鉴于一般的C++入门课本仅提到“在构造函数中动态分配堆内存,在析构函数中释放”,以上内容仅供C++初学者参考之,避免造成思维固化。

  • 相关阅读:
    Team Foundation Server操作说明
    SPSS二次开发
    EXT 组件一些属性与方法(Tree)
    win10经验总结
    for语句执行顺序
    数组快速生成range的方法
    切图技巧
    input和textarea区别
    hosts文件位置
    css3动画总结
  • 原文地址:https://www.cnblogs.com/finallyliuyu/p/1984972.html
Copyright © 2011-2022 走看看