一、运算符重载
C++允许在类中重新编写运算符的功能,一般用于实现对象的运算
一般形式为:返回值类型 operator运算符(参与运算的成员){实现步骤}
- 可以重载的运算符
- 不可以重载的运算符
1、运算符分类
- 数学运算符
+ - * / ++ --
- 关系运算符
== >= <= !=
- 特殊运算符
[ ]
=
赋值运算符 -用于对象赋值时
( )
仿函数
<<
输出运算符
2、实现形式
成员函数式
: 参与的运算成员都为同一成员时
例如:
class Time
{
public:
Time operator+(Time t); //运算符号'+'重载
{ //自定义实现内容
Time c;
c.hour = hour + t.hour;
c.min = min + t.min;
c.sec = sec + t.sec;
return c;
}
private:
int hour;
int min;
int sec;
};
Time a, b;
Time c = a + b; //对象相加
友元函数式
: 参与的运算成员不都为同一成员时
例如
#include <iostream>
using namespace std;
class Time
{
public:
friend void operator<<(ostream, Time);
private:
int hour;
int min;
int sec;
};
void operator<<(ostream &out, Time &t)
{//自定义实现内容
out << t.hour << ":"<<t.min<<":"<<t.sec<< endl;
}
Time a;
std::out<<a;
二、标准输入输出流
C++重新设定标准输入输出类的目的,是为了方便打印与输入功能。
1、std::cout – 标准输出
包含的头文件
:
#include <iostream>
使用方式
:
基本类型自动匹配:
using namespace std; //cout 代替 std::cout
int a;
char arr[] = “hello”;
//sdt::cout << arr << std::endl;
cout << arr << endl; //输出字符串
cout << a << endl; //输出变量
输出格式控制:
a.使用控制符控制输出格式
cout<< hex << 10 <<endl; //十六进制输出
b.用流对象的成员函数控制输出格式
cout.unsetf(ios::dec); //终止10进制
cout.setf(ios::hex);
cout << 10<< endl;
2、std::cin – 标准输入
包含的头文件
:
#include <iostream>
使用方式
:
基本类型自动匹配:
using namespace std; //cout 代替 std::cin
int a;
char arr[10];
//std::cin >> a;
cin >> a;
cin >> arr;
C++提供的输入输出流的控制符与作用
包含头文件
#include<iostream>
#include<iomanip>
控制符 | 作 用 |
---|---|
dec | 设置数值的基数为10 |
hex | 设置数值的基数为16 |
oct | 设置数值的基数为8 |
setfill( c) | 设置填充字符c,c可以是字符常量或字符变量 |
setprecision(n) | 设置浮点数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位数)形式和 scientific(指数)形式输出时,n为小数位数 |
setw(n) | 设置字段宽度为n位 |
setiosflags( ios::fixed) | 设置浮点数以固定的小数位数显示 |
setiosftags( ios::scientific) | 设置浮点数以科学记数法(即指数形式)显示 |
setiosflags( ios::left) | 输出数据左对齐 |
setiosflags( ios::right) | 输出数据右对齐 |
setiosflags( ios::skipws) | 忽略前导的空格 |
setiosflags( ios::uppercase) | 数据以十六进制形式输出时字母以大写表示 |
setiosflags( ios::lowercase) | 数据以十六进制形式输出时宇母以小写表示 |
setiosflags(ios::showpos) | 输出正数时给出“+”号 |
用流对象的成员函数控制输出格式
流对象cout中用于控制输出格式的成员函数
:
流成员函数 | 与之作用相同的控制符 | 作用 |
---|---|---|
precision(n) | setprecision(n) | 设置实数的精度为n位 |
width(n) | setw(n) | 设置字段宽度为n位 |
fill( c) | setfill( c) | 设置填充宇符c |
setf() | setiosflags() | 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中的内容相同 |
unsetf() | resetioflags() | 终止已设置的输出格式状态,在括号中应指定内容 |
流成员函数setf和控制符setiosflags
括号中的参数
,格式标志与状态。
格式标志 | 作用 |
---|---|
ios::left | 输出数据在本域宽范围内向左对齐 |
ios::right | 输出数据在本域宽范围内向右对齐 |
ios::internal | 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充 |
ios::dec | 设置整数的基数为10 |
ios::oct | 设置整数的基数为8 |
ios::hex | 设置整数的基数为16 |
ios::showbase | 强制输出整数的基数(八进制数以0打头,十六进制数以0x打头) |
ios::showpoint | 强制输出浮点数的小点和尾数0 |
ios::uppercase | 在以科学记数法格式E和以十六进制输出字母时以大写表示 |
ios::showpos | 对正数显示“+”号 |
ios::scientific | 浮点数以科学记数法格式输出 |
ios::fixed | 浮点数以定点格式(小数形式)输出 |
ios::unitbuf | 每次输出之后刷新所有的流 |
ios::stdio | 每次输出之后清除stdout, stderr |
三、组合与继承
组合:
简单理解一个类中使用其它的类
继承:
简单理解一个类的升级版,升级版的类根据继承权限使用原类的功能,并且自己可以增加属于自己的新功能
一般命名形式:class 新类:继承权限 原类
例如:
原类:
class A
{
public:
A(){ }
~A(){ }
void showx()
{
cout<<"xxxxxxxxxxxxxxx"<<endl;
}
};
继承类:
class AX:public A //可使用AX的showx功能
{
public:
void showy() //新增的功能
{
cout<<"yyyyyyyyyyyyyy"<<endl;
}
};
继承权限:
- public继承方式
- 基类中所有public成员在派生类中为public属性;
- 基类中所有protected成员在派生类中为protected属性;
- 基类中所有private成员在派生类中不可访问。
- protected继承方式
- 基类中的所有public成员在派生类中为protected属性;
- 基类中的所有protected成员在派生类中为protected属性;
- 基类中的所有private成员在派生类中仍然不可访问。
- private继承方式
- 基类中的所有public成员在派生类中均为private属性;
- 基类中的所有protected成员在派生类中均为private属性;
- 基类中的所有private成员在派生类中均不可访问。
解决private成员在派生类中仍然不可访问的问题,在原类中写得到private的方法,方法属于public成员。