| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 461 人关注过本帖
标题:在类中为什么能用 类名[成员变量名字]
只看楼主 加入收藏
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
结帖率:69.23%
收藏
已结贴  问题点数:20 回复次数:3 
在类中为什么能用 类名[成员变量名字]
程序代码:
#include <iostream>
#include <string>
using namespace std;

class st
{
public:
    st();
    st(const char * const);
    st(const st &);
    ~st();
    char & operator[](int offset);
    char operator[](int offset)const;
    st operator+(const st);
    void operator +=(const st);
    st &operator =(const st &);

    int getlen()const{return itslen;}
    const char * getst()const {return itsst;}

private:
    st(int);
    char * itsst;
    unsigned short itslen;
};
st::st()
{
    itsst=new char[1];
    itsst[0]='\0';
    itslen=0;
    cout << "\t default st cinstructor\n";
}
st::st(int len)
{
    itsst=new char[len+1];
    for(int i=0;i<len; i++)
        itsst[i]='\0';
    itslen=len;
    cout << "\t st(int) constructor\n";
}
st::st(const char * const cst)
{
    itslen=strlen(cst);      //获得字符的长度
    itsst = new char[itslen+1];
    for(int i=0; i< itslen; i++)
        itsst[i]=cst[i];
    itsst[itslen]='\0';
    cout << "\tst(char * )constructot\n";
}
st::st(const st & rhs)
{
    itslen=rhs.getlen();
    itsst =new char[itslen+1];
    for(int i=0; i<itslen; i++)
        itsst[i]=rhs[i];
    itsst[itslen]='\0';
    cout <<"\t st(st &) constructor";
}
st::~st()
{
    delete [] itsst;
    itslen=0;
    cout << "\t st destructor";
}
st& st::operator =(const st & rhs)
{
    if(this == &rhs)
        return *this;
    delete [] itsst;
    itslen =rhs.getlen();
    itsst= new char[itslen +1];
    for(int i=0;i<itslen; i++)
        itsst[i]=rhs[i];
    itsst[itslen]= '\0';
    return *this;
    cout << "\tst operator =\n";
}
char st::operator[](int offset)const
{
    if(offset > itslen)
        return itsst[itslen-1];
    else
        return itsst[offset];
}
char& st::operator[](int offset)
{
    if(offset > itslen)
        return itsst[itslen-1];
    else
        return itsst[offset];
}
st st::operator +(const st rhs)
{
    int totallen = itslen + rhs.getlen();
    st temp(totallen);
    int i,j;
    for(i=0; i<itslen; i++)
        temp[i]=itsst[i];
    for(j=0;j<rhs.getlen();j++,i++)
        temp[i]=rhs[j];
    temp[totallen]='\0';
    return temp;
    cout << "\tst operator+\n";
}
void st::operator+=(const st rhs)
{
    unsigned short rhslen=rhs.getlen();
    unsigned short totallen=itslen+rhslen;
    st temp(totallen);
    int i,j;
    for(int i=0; i<itslen;i++)
        temp[i]=itsst[i];
    for(j=0; j<rhs.getlen(); j++,i++)
        temp[i]=rhs[j];
    temp[totallen]='\0';
    *this =temp;
}
2012-08-03 11:08
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
收藏
得分:0 
st& st::operator =(const st & rhs)
{
    if(this == &rhs)
        return *this;
    delete [] itsst;
    itslen =rhs.getlen();
    itsst= new char[itslen +1];
    for(int i=0;i<itslen; i++)
        itsst[i]=rhs[i];      这里为什么能用rhs[i]访问rhs的itsst变量哦?不是应该是rhs.itsst[i]吗?
    itsst[itslen]= '\0';
    return *this;
    cout << "\tst operator =\n";
}
2012-08-03 11:15
yang0401
Rank: 2
等 级:论坛游民
帖 子:84
专家分:57
注 册:2011-5-23
收藏
得分:0 
求解答啊
2012-08-07 09:13
小叮当
Rank: 2
等 级:论坛游民
帖 子:14
专家分:36
注 册:2012-8-10
收藏
得分:20 
itsst不是st的private变量嘛!当然可以直接访问

2012-08-10 12:48
快速回复:在类中为什么能用 类名[成员变量名字]
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041961 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved