C++学习日记(1)

    我之前就开始学习c++了,不过学到后面发现c++的规则实在太繁杂了,索性在博客上写下一些难点,以供之后我的学习参考,也希望能给别人一些帮助。

1.名称空间

在初学者的程序中经常看到这句代码
using namespace std;

std是一个包含许多基本函数的库(比如cout;cin等),当然其他你包含的库里万一也有这相同名字的函数怎么办?

比如一个work()函数在A和B这两个库都有,就要写成这样,

A::work();
B::WORK();

所以如果不写之前我们第一次提到的代码的话你要调用cout这个函数,就要写成

std::cout<<'Hello,world'<<std::endl;

这看上去麻烦的不行,但是我们可以利用名称空间,将std名称空间里的所有名称都可用。

cout<<'Hello,world'<<endl;

这样就方便多了,但是注意的是在大工程中这显然是一个潜在的问题,如果想单单存入几个函数到名称空间里,可以这样做:

using std::cout;
using std::endl;

这样就能确保单单你想用的函数,前提是没有重名。

2.注意!字符串!

c++11新增了一种原始类型(raw)字符串,具体如下:

cout<<R"+*(lalala,\n,(\t).)+*"<<endl;

显示为:  lalala,/n,(/t).  

这就是raw类型字符串的神奇之处,它可以无视任何\的魔法,它就是一个把原本的字符串打印出来的东西。

注意要以R"+*(................)+*"的格式。

3.结构体和共用体的使用!

struct  animal
{
   int age;
   char[20]  name;
   bool   sex;
}

这是一个结构体,我们怎么使用它呢?

animal dog[2]=
{
{1,'a',0},
{2,'b',1}
};

这样就新建了实体,如何访问呢?

cout<<dog[0].name<<endl;

这样就OK了,如果是指针就用  ->  ,不用  .   。

再来说说共用体(union),比如说有的商品的ID是整数,而其他的是字符串,而且每个物品ID只有一个,那我们可以用union

来构建这样保存可以不同数据但只能保存一种的数据格式

struct good
{
bool type;
union
{
long id_num;
char id_name[20];
}
id_val;//省略了就为匿名共用体
};
good pen=.
{
...........
}
if (type==1)
cout<<pen.id_val.id_num<<endl;
else 
cout<<pen.id_val.id_name<<endl;
//如果为匿名共用体则变为:
//cout<<pen.idname<<endl;

4.指针和new和delete的快乐生活

说实话指针可以说是c++的核心了,它真的很诱人。

int* p=new int;  
char* pc=new char[20];
delete []pc;
delete p; 

p是指向int型的指针,而pc是指向char数组的指针,我们可以new出来也可以delete掉,对内存的管理十分舒服,注意不要只new不delete,这样会造成内存泄漏!(见《c++ Primer Plus》P117)

我们改怎么用呢?数组指针其实就是数组名,这个指针指向数组的第0个元素,不过两者还是有区别的,比如在sizeof时,对数组名是计算出整个数组的大小,而对数组指针而言,sizeof只计算单个它指向的类型的大小。

cout<<pc[1]<<endl;
这样就是打印出来pc指向的数组的第二个元素,对这个指针也可以进行加减法,例如pc++,这pc加上一个char大小的地址。这时候的pc[1]就变成了数组的第三个元素。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值