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()










posted @ 2015-08-24 07:50  cloudren2020  阅读(90)  评论(0编辑  收藏  举报