C++整理1
1.命名空间
namespace A{
static int a=10;
void show(){}
}
A::a;
A::show()
using namespace A;
a;
show();
2.类默认提供的成员
无参构造函数,拷贝构造函数,析构函数,this指针
operator &
operaot =
operator &() const
3.拷贝构造函数
浅拷贝 调用系统默认提供的拷贝构造函数;只拷贝值 不拷贝空间
深拷贝 手写拷贝构造函数,为其中的成员指针或引用变量申请空间并附值
3.new delete / malloc free
new :申请空间 (堆内存) 关键字 特别是对于对象的空间分配
delete :释放空间 关键字
free:释放空间 函数
malloc:分配空间 函数
4.初始化列表的作用
为特殊的成员变量赋值:
1.const修饰或者 指针以及引用类型的变量,
2.父类成员变量在子类中的初始化
5.const
C++
const成员变量:必须使用初始化列表初始化
const成员函数:1.函数不能修改成员的值 2.const可以构成特殊的重载函数(对象优先调用同名的非 常成员函数(不加const))
const对象:只能调用常成员函数(有const修饰的)
C
const变量 只读变量 定义时必须初始化
6.static
static成员变量:类变量,
1.为同一类中所有对象所共享,必须在类外部初始化
static成员函数:类方法,
1.为同一类中所有对象所共享,必须在类外部初始化,
2调用方式:类名::函数名,可以不创建对象
static对象:生命周期比局部对象要长
7.对象的分类
全局对象,局部对象,静态对象,堆对象,无名对象!=====内存分
对象指针,对象引用===操作类型分
8.不同的类的分类
普通类 ===函数之外定义
局部类 ===函数内部定义
嵌套类 ===类内部定义,嵌套类收到宿主类的修饰符的限制 A::B t() A::B t
9.继承权限的控制以及改变
继承权限 public protected private
子类成员对父类成员访问权限
父类成员访问权限
public public protected private
protected protected protected private
private no access no access no access
10.explicit 关键字
显式构造函数 ---限制构造函数隐式转换
11.单继承,多继承,虚继承
单继承
1.以一个类创建一个新类
2.父子类内存分配顺序 先父后子
3.父类成员在子类中的初始化:子类初始化列表中进行
4.成员函数的调用顺序:先子后父,同名隐藏
父子类中,子类同名函数会隐藏父类中同名函数
例如:
class A
{public: void show(){}};
class B:public A
{public: void show(){}};
B b; b.show();
父子类之间的赋值兼容规则:通过子类调用父类的公有方法
Father f=s;
Father &rf=s;
Father *pf=&s;
注:比较 函数重载 | 函数隐藏 | 函数重写(函数覆盖)
都是处理同名函数
函数重载是针对于同一作用域而言,且要满足参数类型/个数/顺序不同,返回值不做要求
函数隐藏是对于有亲缘关系的作用域中(父子类)
函数重写是子类重写父类中的同名的虚函数(virtual)
注1:函数重写的本质:一个类的大小的计算
1.遵循内存对齐原则{linux 4,windows 8}
2.空类占1个字节
3.含有虚函数的类,在1,2的基础上内存大小会多出4个字节(虚指针)
(32位是这样,64位指针大小8字节)
注2:内存对齐原则:
class A{ linux(32) windows(32)
int a; [0-3] 4 [0-3]~ 8
double b; [4-11] 12 [8-15] 16
} +4 16 [16-19]~ 24
total 20B 24B
注3:virtual出现的三个时机:
1.虚函数-->函数重写
2.纯虚函数--->抽象类
3.虚继承--->防止多次继承
多继承
1.用多个已有类创建新类
虚继承
在继承权限前面加上virtual,如 class Dog:virtual public Animal
保证顶级父类只被继承一次,防止出现二义性;
如 动物派生马和驴两个类,这两类派生了骡,如果不加虚继承,骡会继承动物类两次
注:这里的虚继承是指马和驴虚继承了动物类
12.抽象类
1.含有纯虚函数的类;
纯虚函数:没有函数体的虚函数,如 virtual void show()=0;
2.该类不能创建对象,只对子类的设计具有指导意义
13.类的四大特性
抽象性,继承性*,封装性(属性+方法=>1个逻辑单元),多态性*
抽象性:忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。
从而找出事物的共性,并把具有共性的事物划为一类,得到一个抽象的概念
多态性:多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,
它是面向对象编程领域的核心概念
实现:1.函数重写;2.父类指针或引用指向子类的实例
14.类与类之间的关系
继承 已有类创建新类
组合 A类作为B类的局部变量,在成员函数中使用
依赖 A类作为B类的成员变量,(没有A的话就没有B,可以这样理解)
在UML类图的设计中比较重要
15.友元机制
在类的外部访问类中成员
关键字 friend
修饰对象 1.函数:友元函数
2.类:友元类
关于友元关系:
1.不能继承:A是B的友元,C是A的派生子类---》C和B没有关系
2.不能传递:A是B的友元,B是C的友元--》A不是C的友元
3.不能反转:A是B的友元--》B不是A的友元
友元的缺点:一定程度上破坏了类的封装性
应用:运算符重载
14.运算符重载
目的:让对象可以直接使用运算符
函数名:<friend> 返回类型 operator 运算符(参数)
对象使用运算符的本质:操作类中成员变量
重载的方法:1.成员函数,2.友元函数《---成员变量的访问的方法:1.成员函数,2.友元函数
*对于一个运算符,只选择其中一种方式
注:
运算符分类(按重载方法分):
1.只能被友元函数重载
<<, >>
这是输入输出运算符,对象是ostream/istream C++类库
2.只能被成员函数重载
数据类型转换运算符
operator 数据类型
如: operator int ()
{...}
注:不要同是对多个数据类型进行重载
3.默认提供的重载运算符:
operator &
operaot =
operator &() const
4.不能重载的运算符
成员 . ->
指针 *
域作用符 ::
条件运算符 ? :
15.C++ IO流
1.设备IO
cin,cout,cerr,clog
----------------------
ios
inheritance
istream ostream
include
iostream
2.文件IO
ios
inheritance
ifstream ofstream
inheritance
fstream
3.字符串IO
ios
inheritance
istringstream ostringstream
stringstream
sstream
4.设备IO
ostream
1.operator <<()
2.cout.put()
3.width()
4.fill()
5.precision
6.setf ios::left ios::right(默认) 对齐
7.unsef
istream
1.operator >>()
2.get()
3.getline()
4.peek()
5.putback()
6.ignore(5,'w'); 忽略5个char,在忽略5个中有'w'只忽略第一个'w'前面的字符,包括'w'
16.文件IO
ifstream 读文件 --相对于文件而言 从文件输入
ofstream 写文件 输出到文件
继承于 fstream
1.文件基本操作
openc() is_open() close()
2.文件打开方式
open (path,mode)
mode:
ios::in, 只读
ios::out, 只写
ios::app, 追加
ios::trunc, 截断
ios::binary 二进制
3. 文件创建
ifstream ios::app
ofstream ios::out open()
4.
ofstream写文件
operator <<() 格式化写
write () 写
============
ifsteam 读文件
operator >>()格式化读
getline() 读行
read() 读
5.文件其他操作
seekg() seekp() p:put 写指针位置
getp() getg() g:get 读指针位置
eof()
namespace A{
static int a=10;
void show(){}
}
A::a;
A::show()
using namespace A;
a;
show();
2.类默认提供的成员
无参构造函数,拷贝构造函数,析构函数,this指针
operator &
operaot =
operator &() const
3.拷贝构造函数
浅拷贝 调用系统默认提供的拷贝构造函数;只拷贝值 不拷贝空间
深拷贝 手写拷贝构造函数,为其中的成员指针或引用变量申请空间并附值
3.new delete / malloc free
new :申请空间 (堆内存) 关键字 特别是对于对象的空间分配
delete :释放空间 关键字
free:释放空间 函数
malloc:分配空间 函数
4.初始化列表的作用
为特殊的成员变量赋值:
1.const修饰或者 指针以及引用类型的变量,
2.父类成员变量在子类中的初始化
5.const
C++
const成员变量:必须使用初始化列表初始化
const成员函数:1.函数不能修改成员的值 2.const可以构成特殊的重载函数(对象优先调用同名的非 常成员函数(不加const))
const对象:只能调用常成员函数(有const修饰的)
C
const变量 只读变量 定义时必须初始化
6.static
static成员变量:类变量,
1.为同一类中所有对象所共享,必须在类外部初始化
static成员函数:类方法,
1.为同一类中所有对象所共享,必须在类外部初始化,
2调用方式:类名::函数名,可以不创建对象
static对象:生命周期比局部对象要长
7.对象的分类
全局对象,局部对象,静态对象,堆对象,无名对象!=====内存分
对象指针,对象引用===操作类型分
8.不同的类的分类
普通类 ===函数之外定义
局部类 ===函数内部定义
嵌套类 ===类内部定义,嵌套类收到宿主类的修饰符的限制 A::B t() A::B t
9.继承权限的控制以及改变
继承权限 public protected private
子类成员对父类成员访问权限
父类成员访问权限
public public protected private
protected protected protected private
private no access no access no access
10.explicit 关键字
显式构造函数 ---限制构造函数隐式转换
11.单继承,多继承,虚继承
单继承
1.以一个类创建一个新类
2.父子类内存分配顺序 先父后子
3.父类成员在子类中的初始化:子类初始化列表中进行
4.成员函数的调用顺序:先子后父,同名隐藏
父子类中,子类同名函数会隐藏父类中同名函数
例如:
class A
{public: void show(){}};
class B:public A
{public: void show(){}};
B b; b.show();
父子类之间的赋值兼容规则:通过子类调用父类的公有方法
Father f=s;
Father &rf=s;
Father *pf=&s;
注:比较 函数重载 | 函数隐藏 | 函数重写(函数覆盖)
都是处理同名函数
函数重载是针对于同一作用域而言,且要满足参数类型/个数/顺序不同,返回值不做要求
函数隐藏是对于有亲缘关系的作用域中(父子类)
函数重写是子类重写父类中的同名的虚函数(virtual)
注1:函数重写的本质:一个类的大小的计算
1.遵循内存对齐原则{linux 4,windows 8}
2.空类占1个字节
3.含有虚函数的类,在1,2的基础上内存大小会多出4个字节(虚指针)
(32位是这样,64位指针大小8字节)
注2:内存对齐原则:
class A{ linux(32) windows(32)
int a; [0-3] 4 [0-3]~ 8
double b; [4-11] 12 [8-15] 16
} +4 16 [16-19]~ 24
total 20B 24B
注3:virtual出现的三个时机:
1.虚函数-->函数重写
2.纯虚函数--->抽象类
3.虚继承--->防止多次继承
多继承
1.用多个已有类创建新类
虚继承
在继承权限前面加上virtual,如 class Dog:virtual public Animal
保证顶级父类只被继承一次,防止出现二义性;
如 动物派生马和驴两个类,这两类派生了骡,如果不加虚继承,骡会继承动物类两次
注:这里的虚继承是指马和驴虚继承了动物类
12.抽象类
1.含有纯虚函数的类;
纯虚函数:没有函数体的虚函数,如 virtual void show()=0;
2.该类不能创建对象,只对子类的设计具有指导意义
13.类的四大特性
抽象性,继承性*,封装性(属性+方法=>1个逻辑单元),多态性*
抽象性:忽略事物中与当前目标无关的非本质特征,更充分地注意与当前目标有关的本质特征。
从而找出事物的共性,并把具有共性的事物划为一类,得到一个抽象的概念
多态性:多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,
它是面向对象编程领域的核心概念
实现:1.函数重写;2.父类指针或引用指向子类的实例
14.类与类之间的关系
继承 已有类创建新类
组合 A类作为B类的局部变量,在成员函数中使用
依赖 A类作为B类的成员变量,(没有A的话就没有B,可以这样理解)
在UML类图的设计中比较重要
15.友元机制
在类的外部访问类中成员
关键字 friend
修饰对象 1.函数:友元函数
2.类:友元类
关于友元关系:
1.不能继承:A是B的友元,C是A的派生子类---》C和B没有关系
2.不能传递:A是B的友元,B是C的友元--》A不是C的友元
3.不能反转:A是B的友元--》B不是A的友元
友元的缺点:一定程度上破坏了类的封装性
应用:运算符重载
14.运算符重载
目的:让对象可以直接使用运算符
函数名:<friend> 返回类型 operator 运算符(参数)
对象使用运算符的本质:操作类中成员变量
重载的方法:1.成员函数,2.友元函数《---成员变量的访问的方法:1.成员函数,2.友元函数
*对于一个运算符,只选择其中一种方式
注:
运算符分类(按重载方法分):
1.只能被友元函数重载
<<, >>
这是输入输出运算符,对象是ostream/istream C++类库
2.只能被成员函数重载
数据类型转换运算符
operator 数据类型
如: operator int ()
{...}
注:不要同是对多个数据类型进行重载
3.默认提供的重载运算符:
operator &
operaot =
operator &() const
4.不能重载的运算符
成员 . ->
指针 *
域作用符 ::
条件运算符 ? :
15.C++ IO流
1.设备IO
cin,cout,cerr,clog
----------------------
ios
inheritance
istream ostream
include
iostream
2.文件IO
ios
inheritance
ifstream ofstream
inheritance
fstream
3.字符串IO
ios
inheritance
istringstream ostringstream
stringstream
sstream
4.设备IO
ostream
1.operator <<()
2.cout.put()
3.width()
4.fill()
5.precision
6.setf ios::left ios::right(默认) 对齐
7.unsef
istream
1.operator >>()
2.get()
3.getline()
4.peek()
5.putback()
6.ignore(5,'w'); 忽略5个char,在忽略5个中有'w'只忽略第一个'w'前面的字符,包括'w'
16.文件IO
ifstream 读文件 --相对于文件而言 从文件输入
ofstream 写文件 输出到文件
继承于 fstream
1.文件基本操作
openc() is_open() close()
2.文件打开方式
open (path,mode)
mode:
ios::in, 只读
ios::out, 只写
ios::app, 追加
ios::trunc, 截断
ios::binary 二进制
3. 文件创建
ifstream ios::app
ofstream ios::out open()
4.
ofstream写文件
operator <<() 格式化写
write () 写
============
ifsteam 读文件
operator >>()格式化读
getline() 读行
read() 读
5.文件其他操作
seekg() seekp() p:put 写指针位置
getp() getg() g:get 读指针位置
eof()