C++学习笔记:规范


1.初始化的规范写法

在这里插入图片描述

2.常量函数

const变量只能调用const函数,所以在类内最好把一些函数设置成const函数,写法如下,普通变量也可调用const函数,这样可以提高代码的鲁棒性。
在这里插入图片描述

const complex c(2, 1);		// 定义常量变量
c.real();					// 若 real() 函数不加以const修饰,则编译时会报错: error: passing 'const complex' as 'this' argument 

在自定义函数中如果传入的变量是const类型,那么函数中该变量只能调用const函数

3.传参尽量传引用

为了提高效率,使用引用传递参数,避免了参数的复制.若不希望在函数体内对输入参数进行修改,使用const修饰输入参数。
在这里插入图片描述

4.同一个类的对象互为友元

在这里插入图片描述
同一类的各个对象互为友元,因此在类定义内可以访问其他对象的私有变量

complex c1, c2;
c2.func(c1);		// 因为c1和c2互为友元,因此c2可以在func()函数内调用c1的私有变量

5.操作符的重载

5.1 <<的重载

在进行操作符重载时需要标明为友元。
以输出符号为例,因为要考虑串行输出,故返回值应该是ostream型变量的引用。
在类内声明如下:

friend ostream & operator << (ostream & os ,const complex & p);

在类外编写实现:

ostream & operator << (ostream & os ,const complex & p)
{
    os<<p.re<<'+'<<p.im;
    return os;
}

当然,在不需要串行输出时,也可以令函数的返回值类型为空。
事实上,os变量在进行操作时本身已经发生了变化(抽象理解)

5.2 +的重载

以运算符号为例:
在类内声明如下:

complex operator +  (const complex &b) const
{
    return complex(this->real+b.real,this->image+b.image);
}

此时返回值不可是comlpex & 引用类型,因为临时变量当函数结束时就被销毁,而引用本质是指针,无法对销毁的变量寻址。

5.3 重载作为成员函数与非成员函数

5.3.1作为成员函数时的写法

作为成员函数时,其中一个操作数会通过this指针传递,故只需要写入一个参数。

complex operator +  (const complex &b) const
{
    return complex(this->real+b.real,this->image+b.image);
}

5.3.2作为非成员函数时的写法

作为非成员函数时,需要写入两个参数。

complex operator +  (const complex &a,const complex &b) const
{
    return complex(a.real+b.real,a.image+b.image);
}

6.指针

const char *ptr
char * const ptr

第一行const先与char结合,定义一个指向char类型常量的指针ptr,也叫常量指针(指向常量的指针),可以修改ptr的指向,但不能修改*ptr的值。

第二行const先与*结合,定义一个指向char类型的指针常量(指针型的常量),即const指针,不能修改ptr指针的指向,但是可以修改*ptr

7.字符串相关

7.1 C风格字符串

字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。

char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};

上述字符串的实际储存空间为6个字符,比储存的字符数量多1,因为要以‘\0’ 结尾。初始化时,也可以采用下面的方式,此时会自动补上结尾的‘\0’

char greeting[] = "Hello";

此外,也可以用如下的方式初始化。

char * a="string1";
char b[]="string2";

二者的不同点
1.char是变量,值可以改变, char[]是常量,值不能改变!
a是一个char型指针变量,其值(指向)可以改变;
b是一个char型数组的名字,也是该数组首元素的地址,是常量,其值不可以改变。
2.char[]对应的内存区域总是可写,char*指向的区域有时可写,有时只读。
参考的大佬博客
解释: a指向的是一个字符串常量,即指向的内存区域只读。b始终指向他所代表的数组在内存中的位置,始终可写!
VS2019无法用char型指针指向const型字符串解决方案传送门

7.2 C风格字符串相关函数

函数名称功能
strcpy(s1,s2)复制字符串 s2 到字符串 s1
strlen(s1)返回字符串 s1 的长度
strcat(s1,s2)连接字符串 s2 到字符串 s1 的末尾

以上函数传入地址或者字符串名称即可。

    char* a ;
    char* b = "strin";
    cout<<strlen(a)<<endl;
    strcpy(a,b);
    cout<<a<<endl;

注:当a与b一样被初始化为const类型以后用strcpy拷贝会报错,因为const变量不许被修改。同理strcat也不可处理const型字符串

7.3 C++风格字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值