C++期末简单梳理

1.前言

写本文的目的主要有二。第一,为了分享一下自己在短短的一学期学到的C++知识;第二,把所学记录下来,方便以后复习,告别考完就扔的实用主义。
声明:以下内容聚焦于C++的简单特性及应用,内容不是很深,仅供参考。另外,本文章持续更新。

2.知识梳理

2.1 封装性

封装性是指把数据成员和方法封装到类中,调用时只在乎接口而不关心内部细节。

2.1.1 名字空间

名字空间就是作用域。
主要作用就是使不同的名字可以被复用,如两个类可以有同名函数。
1 类外定义函数: Type classname::func(){}
2 可以在2个名字空间声明同名函数而这不算重载。

2.1.2 访问权——封装性的保险

有三种:public, protect private
1 public 说明可以从类外直接访问,private和protected 必须通过成员函数或者友元访问。派生类继承基类声明的成员是指获得其副本,访问基类成员也是受限制的。
2 三种继承方式。

2.1.3 this指针

类中,非static、非友元的成员函数在参数列表中都会缺省一个this指针,指向对象。
1 当参数名和成员名相同时,可能用到this指针。使用示例:this->x=x;
2 用成员函数重载运算符时,如果是二元运算符,参数列表只需写后面的变量,就是有this指针
(3 类对象调用成员函数也是和this指针有关的,其指向相应代码段。)

2.1.4 static与const

static是为类的多个对象所共享的,可以通过类名调用。
static成员变量:
类内声明,类外(同一头文件里)定义并初始化,所有对象共享。使用示例:如学生对象,static int number用来统计目前一共有多少个学生,方便给学生编号。
static成员函数
0 声明时static在最前面
1 不能被声明为const
2 无缺省的this指针
3 无法直接访问非静态成员变量(本来就是为了处理static变量而存在的?)

const成员函数
0 声明时const在最后面
1 常成员函数无法修改成员变量,可见其主要是为了保护类内成员而存在的。使用示例:把get系列函数都命名为const,保护数据。

其实初看这两个特性,确实不太明白有啥用。后来才发现,在大规模程序中,这样可以增加程序可读性,也可以很有效地避免错误发生,极大的提高效率。所以说,c++很多特性都是为了大规模程序而存在的,正所谓积水成渊。

2.1.5 友元——实现类交互

主要形式是友元函数与友元类。A类声明友元,则该友元可以随意访问A。
1 由于友元函数无this指针,调用它有三种情况。其一,访问类的static变量,可以不带形参;其二,有类对象全局变量时,可以不带形参;除此之外,需要带对象形参,不然没得可访问啊。
2 友元类 不可逆。A是B的友元,则B不是A的友元

2.1.6 构造函数、析构函数、拷贝构造函数

构造函数用于初始化一个类对象,析构函数用于删除类对象的空间,拷贝构造函数用于对象间赋值。
1 三者都有系统默认的函数,除了析构函数都可以重载。
2 拷贝构造函数参数必须是const &类型,另外当设及指针变量时,还需避免浅拷贝的问题。

2.1.7 内联函数

可类比宏定义,但避免了宏定义的诸多问题,意义是节约资源。
1 函数有循环体时,内联没有意义。
2 隐式定义:在类内定义,默认为inline函数
显式定义:类内声明,类外(同一头文件中)定义

3.应用

3.1 c++输入输出

3.1.1文件输入输出

用fstream头文件中的ifstream和ofstream类进行文件输入输出。
具体方法为:
ifstream fin 定义一个对象
fin.open(文件名,打开方式ios::in/ios::bin(二进制))
之后用>>进行文本输入
用read((char*)&typename x,sizeof(type) )进行二进制输入,注意一定要加(char *)
用getline(fin,string s)进行可读入空格的整行扫描输入
用fin.eof() bool函数判断是否读完。
输出同理。

3.1.2输入输出格式

cout.setf(ios::oct,ios::basefield)八进制输出
cout.setf(ios::tex,ios::basefield)十六进制输出
cout.setf(ios::basefield)输出重置 cout.setf(ios::scientific);科学计数法输出
cout.setf(ios::showpos)带正负号输出

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值