| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 832 人关注过本帖
标题:帮小女子看看这简单的C++类程序,有一句不明白
只看楼主 加入收藏
avator123
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2010-12-3
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:6 
帮小女子看看这简单的C++类程序,有一句不明白
程序代码:
#include <isotream.h>
#include<string.h>
#include<stdio.h>

class MyString {
   char cpBody[81];
public :
MyString & operarator++ (int i)
{

 static MyString s ;

 s = *this;  // 这句话什么意思?什么时候需要这样做呢?
 *this = (cpBody[0] == '\0') ? *this : (*this)[1]; return s ; //帮忙解释一下这句话的意思。。
void display() {printf("<%s>\n",cpBody);}
friend MyString& operator+(int i ,MyString&s);

}





[ 本帖最后由 avator123 于 2011-12-31 12:44 编辑 ]
搜索更多相关主题的帖子: 小女子 color 
2011-12-31 11:48
lijunbo
Rank: 1
等 级:新手上路
帖 子:13
专家分:8
注 册:2011-10-5
收藏
得分:3 
1.this是一个指针,是绑定在自身类对象对象上面的,*this就是指针的解引用。至于为什么这么做,当你定义一个类时,并没有生成类对象,所以无法引用类对象的名字,只能用this来表示。
2.?:是c++中的表达式。格式为:cond?expr1:expr2;含义:首先计算cond条件表达式的值,如果为真,则执行expr1,否则执行expr2.
*this = (cpBody[0] == '\0') ? *this : (*this)[1]; return s ;这句话意思是如果数组cpBody的首个元素等于空字符,则*this=*this,也就不变,如果首个元素不为空,*this=(*this)[1],return s;是下一条语句,你完全可以将它单独写为一行,这样更清楚
ps:这个程序写的有点乱,不太符合c++标准。用了很多c的格式

[ 本帖最后由 lijunbo 于 2011-12-31 13:17 编辑 ]
2011-12-31 13:10
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:3 
s = *this; // 调用s的operator=,由于没有显示定义,所以这里调用的是编译器生成的,默认执行位拷贝。
*this = (cpBody[0] == '\0') ? *this : (*this)[1]; return s ; // 这句明显有错误,没有为MyString定义operator[]。

这个类想用后缀++来移动cpBody的首部指针,不过代码是乱写的,我需要我帮你写一个吗?

My life is brilliant
2011-12-31 14:06
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:3 
楼上的写一个示例一下吧。

我们都在路上。。。。。
2011-12-31 14:21
lz1091914999
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:四川
等 级:贵宾
威 望:37
帖 子:2011
专家分:5959
注 册:2010-11-1
收藏
得分:0 
程序代码:
#include <iostream>
#include <cstring>

class MyString {
public:
   MyString(const char* cp): beg(text) {
      std::strcpy(beg, cp);
   }

   MyString& operator++(int) {
      ++beg;
      return *this;
   }

   void display() const {
      std::cout << "<" << beg << ">" << std::endl;
   }
private:
   char text[81];
   char* beg;
};

int main() {
   MyString ms("Hello, Hello, Hello, C Plus Plus");
   ms.display();
   ms++;
   ms.display();
   ms++;ms++;ms++;
   ms.display();
}

/* Output:
<Hello, Hello, Hello, C Plus Plus>
<ello, Hello, Hello, C Plus Plus>
<o, Hello, Hello, C Plus Plus>

Process returned 0 (0x0)   execution time : 0.406 s
Press any key to continue.
*/

My life is brilliant
2011-12-31 14:37
烟雾中的迷茫
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:621
专家分:1069
注 册:2011-2-9
收藏
得分:3 
解释够详细了…呵呵,简单的说就是该对象本身的指针
2011-12-31 17:15
avator123
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2010-12-3
收藏
得分:0 
*this = (cpBody[0] == '\0') ? *this : (*this)[1]; return s ; //(*this) = (*this)[1] 是什么意思?
2011-12-31 17:45
快速回复:帮小女子看看这简单的C++类程序,有一句不明白
数据加载中...
 
   



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

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