|
1>
class StringBad
{
private:
char *str;
int len;
static int num_strings;
public:
StringBad (const char *s);
StringBad();
~StringBad();
}
StringBad A ("clear up");
StringBad B;
B = A;
现有:"赋值操作符"原型: StringBad & StringBad :perator= (const StringBad & );
问题:当然我把A赋值给A,(B=A),根据原型它返回的是StringBad的引用,那么就是讲B中的数据与
A中的数据是一个地址咯?那B这个对象与A对象不是共享了一些数据?这样不是很危险吗?
2>
StringBad & StringBad :: operator = ( const StringBad &)
{
if (this == & st)
return *this;
delete [ ] str;
len = st.len;
str = new char [len+1];
strcpy (str,st.str);
return *this;
}
这是一个赋值过程.其中:delete [] str;目的是释放由于目标对象可能引用了以前分配的数据.
我想问如果目标对象没有引用什么数据这一句将如何作用呢?delete不是只用于用new分配的
内存吗?这个str不一定是由new分配的呀!
3>
对类数据成员的操作问题?
比如一个成员函数对三个数据成员进行操作然后就直接改变了它们的值.
我想不通为什么它这样对成员数据进行操作没有用返回,指针,引用,就可以直接更改了它们的值呢?
EG:
class base
{
private:
int a ;
double b;
public:
update (int x, double y);
}
base::updata (int x, double y)
{
a = x;
b = y;
}
这样a,b的值就直接被改变了,为什么呢? |
|