C++要点回顾(谭爷爷的书)

2017-05-05  本文已影响0人  ifeelok

变量的引用

void swap(int&a, int&b)
{
  int temp=a;
  a=b;
  b=temp;
}

inline function:compile时,将内联函数嵌入到main里,以空间换时间,适用于规模小且频繁调用的函数

作用域运算符:有个全局变量a,有个局部变量a,在局部,用a会屏蔽全局a,如果真想用a,通过::a

动态分配/回收内存的运算符new和delete
new int //allocate a space, return a ptr
new int(100) //eval the initial val
new int[10] //allocate a space to store array, in this case, you cannot specify initial val

float* p=new float(3.14);
float* parr=new float[10];
delete p;
delete[] ptr;

无参数的构造函数
Box b 而不是b()

类对象数组 Box b[3]={Box(参数), Box(参数), Box(参数)}

指向普通函数的指针:
void (p)( )
可以使它指向一个函数
p=&fun
可以通过该指针变量,调用该函数
(
p)( )

指向成员函数的指针
void (Time::*p)()

普通函数: 类型名 (指针变量名)(参数列表)
成员函数: 类型名 (类名::
指针变量名)(参数列表)

数据既能共享,又不会被修改,使用const
如果一个对象为const,那么它不可以call非const的成员

类名 *const 指针变量名 = 对象地址
这是个常指针,只能指向一开始确定的那个对象

const 类名*指针变量名
这个是指向常变量的指针,可以换别的常对象

静态定义对象,在runtime,对象所占的空间是不能随时释放的
想要提高内存的利用率,可以动态建立和释放对象
用new运算符动态地分配内存后,将返回一个指向新对象的指针
Box* p=new Box(12,13,14);
程序可以通过这个p访问对象
在执行new运算时,如果内存量不足,返回一个0
delete p;
memberwise copy

静态数据成员,为所有类对象所共享,只能在类外面进行初始化
类名::静态变量

友元函数:可以是普通函数,也可以是其他类的成员函数
友元函数可以访问私有变成员
用关键字friend声明友元函数
如果是其他类的成员函数作为友元函数,要提前声明其他类

运算符重载:
格式——类型 operator 运算符名(参数表)
{重新定义运算规则}
注意 operator 运算符名 就是函数名,其他的和普通函数没什么区别

对>>和<<进行重载,只能作为普通函数不可以作为成员函数
istream & operator >>(istream &, 自定义类 &)
ostream & operator >>(ostream &, 自定义类 &)

#include <iostream>
using namespace std;

class Complex{
private:
    float re;
    float im;
public:
    Complex():re(0),im(0){};
    Complex(float r,float i):re(r),im(i){};
    //Complex operator +(Complex& a);
    //void show();
    friend ostream & operator<<(ostream & nout,Complex &c);
    friend Complex operator + (Complex &a,Complex &b);
    friend istream & operator>>(istream & nin,Complex &c);
};

/*Complex Complex::operator +(Complex& a){
    float real,imag;
    real=a.re+re;
    imag=a.im+im;
    return Complex(real,imag);
}*/
istream & operator>>(istream & nin,Complex &c){
    cout<<"Enter real and imaginary part:"<<endl;
    nin>>c.re>>c.im;
    return nin;
}
ostream & operator<<(ostream & nout,Complex &c){
        if(c.im==0){
        nout<<c.re<<endl;
    }else if(c.im<0){
        nout<<c.re<<c.im<<"i"<<endl;
    }else{
        nout<<c.re<<"+"<<c.im<<"i"<<endl;
    }
    return nout;
}


Complex operator+(Complex &c1,Complex &c2){
    return Complex(c1.re+c2.re,c1.im+c2.im);
}
int main(){
    Complex u;
    Complex v;
    cin>>u>>v;
    Complex w;
    w=u+v;
    cout<<w;
    return 0;
}
上一篇下一篇

猜你喜欢

热点阅读