C++赋值操作符

原创 2013年12月01日 20:17:14

class String{

public:

String & operator=(const String &s);

private:

char *data;

}



String & String::operator=(const String &s);

{

if(&s != this)

{

delete [] data;

data = new char[strlen(s.data)+1];

strcpy(data,s.data);

}

return *this;

}

String & String::operator=(const String &s);

{

char *newdata = new char [strlen(s.data)+1];

Strcpy(newdata,s.data);

Delete [] data;

Data = newdata; 

return *this;

}

在C++的学习中,有人经常搞不清楚“常量指针”和“指针常量”这两个概念。其实简单一点讲,“常量指针”所指向的地址上的数据是常量,而“指针常量”所指向的地址是常量,地址上面的数据是可以变化的。


     下面看及格简单的例子,可以说明他们的区别:
            第一个

 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     char * const ptr1 =str1 ;
 5     //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
 6 
 7     ptr1 =str2; //错误 因为这是一个常量指针,改变指向的地址了
 8 
 9     printf("%s \n",*ptr1);
10     }
11 
12 
13 // 编译错误    error C3892: 'ptr1' : you cannot assign to a variable that is const    
14 


第二个

 1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     char * const ptr1 =str1 ;
 5     //指针常量--指针本身是常量,指向的地址不可以变化,但是指向的地址所对应的内容可以变化
 6 
 7     *ptr1 ='A';// 正确 因为指向的地址的内容是可以变化的
 8 
 9     printf("%c \n",*ptr1);
10     }
11 
12 //输出  A
13 

第三个

 1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     const char *ptr1 = str1;
 5     //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
 6     
 7     ptr1=str2;// 正确 因为指向的地址是可以变化的
 8 
 9     printf("%s \n",ptr1);
10     }
11 
12 //输出 Hello World

第四个

 1 void main(){
 2     char *str1={"Hello"};
 3     char *str2={"Hello World"};
 4     const char *ptr1 = str2;
 5     //常量指针--指向字符串常量,所指向的字符串内容不能变,但是指向的地址可以变化
 6     
 7     ptr1='A';// 错误 因为指向的地址是内容是不可以变化的
 8 
 9     printf("%c \n",ptr1);
10     }
11 
12 
13 //编译错误    error C2440: '=' : cannot convert from 'char' to 'const char *'

相关文章推荐

C++中复制构造函数与重载赋值操作符总结

前言 这篇文章将对C++中复制构造函数和重载赋值操作符进行总结,包括以下内容: 复制构造函数和重载赋值操作符的定义;复制构造函数和重载赋值操作符的调用时机;复制构造函数和重载赋值操作符的实...

C++复制构造函数和赋值操作符的区别

转自:http://blog.csdn.net/randyjiawenjie/article/details/6666937 今天做C++ primer的习题,被复制构造函数和赋值符的区别弄晕了。简...

C++语法基础--复制控制--复制构造函数 ,赋值操作符 ,析构函数

复制控制(编译器自动实现这些操作)             *复制构造函数             *赋值操作符              *析构函数          1.复...

C++赋值操作符与析构函数

赋值操作符的定义: 1)赋值操作符,就是常用变量赋值的“=”,将一个玩意赋值给另一个玩意 2)默认形式:classType & operator=(const classType &); opera...
  • comwise
  • comwise
  • 2014年02月18日 16:44
  • 738

C++入门(16):副本构造器和赋值操作符、强制类型转换

C++入门(16):副本构造器和赋值操作符、强制类型转换副本构造器和赋值操作符 副本构造器形式为:MyClass(const MyClass &rhs); ,没有返回类型。 赋值操作符形式为:My...

C++语法基础--派生类的构造函数,赋值操作符,析构函数,虚析构函数

1.如果派生类定义了自己的构造函数(复制构造函数)或赋值操作符,该构造函数(复制构造函数)或赋值操作符一般应显式使用基类构造函数(复制构造函数)或赋值操作符初始化基类部分、   Eample:  ...

Effective C++(十一):为需要动态分配内存的类声明一个复制构造函数和一个赋值操作符

首先看一个例子: //一个很简单的string类 class string{ public: string(const char* value); ~string; ... ...

c++ primer 学习笔记:复制控制之赋值操作符

赋值操作符 与类要控制初始化对象的方式一样,类也定义了该类型对象赋值时会发生什么:Sales_item trans, accum; trans = accum; 与复制构造函数一样,如果类没有定义自...

C++ Primer 学习笔记_16_表达式 --算术、关系、逻辑、位、赋值、自增/自减操作符

表达式 --算术关系逻辑位赋值自增自减操作符 引正文 表达式 --算术、关系、逻辑、位、赋值、自增/自减操作符 引:    除了特殊用法,表达式的结果为右值:可以读取结果值,但是不能...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++赋值操作符
举报原因:
原因补充:

(最多只允许输入30个字)