C++学习二--运算符重载、组合与继承


一、运算符重载

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成员。


在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

修成真

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值