永发信息网

c++源程序

答案:2  悬赏:70  手机版
解决时间 2021-04-14 01:00
  • 提问者网友:斑駁影
  • 2021-04-13 08:39

#include <iostream>
#include <cstring>
#include <iomanip>
using namespace std;

class mystr {
public:
mystr(const char* str)
: s(0), len(strlen(str))
{
if(len != 0)
newAndCopy(s, str, len + 1);
}

mystr(const mystr& as)
: s(0), len(as.len)
{
if(len != 0)
newAndCopy(s, as.s, len + 1);
}
bool operator < (const mystr& rhs)
{
return strcmp( s, rhs.s ) < 0;
}
bool operator > (const mystr& rhs)
{
return strcmp( s, rhs.s ) > 0;
}
bool operator == (const mystr& rhs)
{
return strcmp( s, rhs.s ) == 0;
}

mystr& operator = (const mystr& as)
{
if(&as == this)
return *this;
if(len > 0)
delete [] s;
len = as.len;
s = 0;
if(len != 0)
newAndCopy(s, as.s, len + 1);
}

friend ostream& operator << ( ostream& os, const mystr& rhs )
{
return os << rhs.s;
}

~mystr() { if(s) delete [] s; }

const char* c_str() const { return s; }
size_t size() const { return len; }

private:
static void newAndCopy(char*& dest, const char* src, int len)
{
dest = new char[len];
strcpy(dest, src);
}
char* s;
size_t len;
};

#define CMP( s1, s2, op ) cout << setw(20) << s1 << #op"\t" << setw(20) << s2 << ":\t" << (s1 op s2) << endl;
int main()
{
mystr s1("oh, at last");
mystr s2("frostmoan hungers");
mystr s3("speak fool!");
mystr s4(s2);
cout.setf(ios::boolalpha | ios::left);
CMP( s1, s2, > );
CMP( s2, s3, < );
CMP( s1, s3, == );
CMP( s2, s4, == );
return 0;
}

专家你好!你帮我看一下这个程序,第八行最开始那个冒号是什么意思哦?O(∩_∩)O谢谢你~

最佳答案
  • 五星知识达人网友:英雄的欲望
  • 2021-04-13 09:04

上面的兄弟说的一部分是有问题的:如果S是一个CONST的呢。就只能在构造数后面用冒号来初始化,不能在构造函数里面初始化,其它变量就可以用上面兄弟说的那种写法了。多看一下书,书上面会讲的。仔细一点,学程序是要常常复习和使用的。书要常常看。祝你成功。


mystr(const char* str)
: s(0), len(strlen(str))//这个冒号表示初始化后的S,len,
{
if(len != 0)
newAndCopy(s, str, len + 1);
}

全部回答
  • 1楼网友:蓝房子
  • 2021-04-13 09:45

mystr(const char* str) //构造函数. : s(0), len(strlen(str)) //将数据成员s初始化为0,len初始化为参数str的长度 { //函数体. if(len != 0) newAndCopy(s, str, len + 1); }

这种写法其实就等于

mystr(const char* str) //构造函数. { s=0; len=strlen(str); //将数据成员s初始化为0,len初始化为参数str的长度 if(len != 0) newAndCopy(s, str, len + 1); }

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯