请教关于primer中的一个问题
c++ primer中有个例子看不懂,如下:
#include <iostream>
#include <assert.h>
#include <iomanip>
using namespace std;
class myString;
istream& operator>>(istream&,myString&);
ostream& operator<<(ostream&,const myString&);
class myString
{
public:
myString& operator=(const myString&);
int size(){return _size;}
char* c_str(){return _string;}
.....
private:
int _size;
char* _string;
....
};
inline myString& myString::operator =(const myString& str)
{
if(this!=&str)
{
if(_string)
delete[]_string;
_size=str._size;//问题一
_string=new char[_size+1];
strcpy(_string,str._string);
}
return *this;
}
inline istream& operator>>(istream& io,myString& s)
{
const int limit_string_size=4096;
char inBuf[limit_string_size];
io>>setw(limit_string_size)>>inBuf;
s=inBuf;
return io;
}
inline ostream& operator<<(ostream& os,myString& s)//问题二
{
return os<<s.c_str();
}
问题一:为什么用_size=str.size()会报编译错误,而用_size=str._size却没问题??
问题二:为什么<<重载的声明中的参数用const修饰,而在实现的时候用const就不行,必须去掉才会编译通过??
ps:环境windowsxp+ vc++6.0
以上都包含在一个头文件中myString.h
#include <iostream>
#include <assert.h>
#include <iomanip>
using namespace std;
class myString;
istream& operator>>(istream&,myString&);
ostream& operator<<(ostream&,const myString&);
class myString
{
public:
myString& operator=(const myString&);
int size(){return _size;}
char* c_str(){return _string;}
.....
private:
int _size;
char* _string;
....
};
inline myString& myString::operator =(const myString& str)
{
if(this!=&str)
{
if(_string)
delete[]_string;
_size=str._size;//问题一
_string=new char[_size+1];
strcpy(_string,str._string);
}
return *this;
}
inline istream& operator>>(istream& io,myString& s)
{
const int limit_string_size=4096;
char inBuf[limit_string_size];
io>>setw(limit_string_size)>>inBuf;
s=inBuf;
return io;
}
inline ostream& operator<<(ostream& os,myString& s)//问题二
{
return os<<s.c_str();
}
问题一:为什么用_size=str.size()会报编译错误,而用_size=str._size却没问题??
问题二:为什么<<重载的声明中的参数用const修饰,而在实现的时候用const就不行,必须去掉才会编译通过??
ps:环境windowsxp+ vc++6.0
以上都包含在一个头文件中myString.h
...全文
相关推荐
primer5-仅限个人学习
我们了解到Primer5是一款适合个人学习的软件,其最新版本为5.5.0,且只能用于非商业性的学习目的。用户在下载和使用该软件时应严格遵守许可协议中的规定,不得将其用于任何商业用途,以免触犯版权法规。
Primer Premier 5 win7
下面,我们将详细探讨Primer Premier 5在win7系统中的主要功能、使用技巧以及可能遇到的问题。一、Primer Premier 5的功能特性1.
C Primer Plus 课后习题答案.zip
压缩包中的“empty_file.txt”可能是一个空文件,这在编程中有时用于测试读写操作或者作为占位符。
Primer5.0 64系统(win7/8)
此外,Primer5.0的项目文件保存了所有设计参数和结果,便于后续打开继续工作。8. **常见问题与解决**: 在使用过程中,可能会遇到如软件崩溃、无法激活等问题。
C++Primer题解.rar
**实践与调试**:书中每个题目都是一个实际的编程挑战,通过解决这些问题,读者不仅可以巩固理论知识,还能提升调试技巧,学会如何分析和修复代码中的错误。7.


