四、表达式
4、赋值操作符
= 就是赋值操作符,把右值赋给左值【初始化一次,赋值可以无数次】
如果左值和右值的数据类型不同,赋值时编译器会给个警告【如果类型转换是有可能的话】,会尝试把右值数据类型转变成左值的数据类型【隐式转换】,但是常常会涉及精度丢失的问题。如果不能够进行隐式转换,那就会报错。
//不能隐式转换的例子
int *pi = ival; // 地址和整型
const int array_size = 8;
array_size = 512; // 错误,只读
【在进行运算时,一定要注意操作符的顺序】
( ch = next_char() ) != '\n' //先运算括号里再括号外
ch = next_char() != '\n' // 先运算逻辑操作符,再赋值
连等操作的合法性:
1、相同类型已经定义的变量,连等的赋值是可以的;
2、不同类型已经定义的变量,连等的赋值是不行的;
3、在定义时,尽量不使用连等;【分情况,如果都没定义就完全不合法,如果其中一个已经定义了,赋值给未定义的变量时,如果数据类型相同,就是合法的】
几个复合赋值操作符:
+= -= *= /= %=
<<= >>= &= ^= |=
5、递增和递减操作符
递增和递减操作符都分为后置和前置两种情况:
后置时: i++; i--; 先用i的值,然后再进行i+(-)1的操作;
前置时:++i;--i;先递增或者递减,再使用i的值。
6、复数操作
标准库提供复数类,通过在类体内进行操作符重载,可以对复数也进行算术运算。
#include <complex>
complex< double > a;
complex< double > b;
complex< double > c = a * b + a / b;
我们也可以使用基本数据类型给复数类型进行赋值,但是反过来不行,必须只赋值复数的实部或者虚部:
//基本类型给复数赋值
double dval = 3.14159;
complex_obj = dval;
//复数给基本类型赋值
double re = complex_obj.real(); //double re = real( complex_obj );
double im = complex_obj.imag(); //double im = imag( complex_obj );
复数支持四种复合运算 :
+= -= *= /=
C++支持对复数的输入输出:
//cout输出复数
complex< double > complex0( 3.14159, -2.171 );
complex< double > complex1( complex0.real() );
cout << complex0 << " " << complex1 << endl;
//输出
( 3.14159, -2.171 ) ( 3.14159, 0.0 )
//cin读取复数
cin >> a >> b >> c
// 这里 a b 和 c 为复数对象
3.14159 ( 3.14159 ) ( 3.14, -1.0 )