C++总结-较C

C总结

定义宏函数和宏函数返回值

定义的宏函数一般函数体会用{}括起来,如果要其返回值的话,需要外面再用()括起来,而且最后一句表达式的值就是这个宏函数的返回值;


fork系列函数

fork 是吧父进程的所有资源拷贝一份给子进程,这里是一个copy;
fork 后父子进程执行没有先后顺序;

为了解决fork后使用exec系列函数执行外部函数重复创建资源,
就有了vfork,
vfork创建子进程,共享父进程的资源,这里是一个share;
vfork配合exec系列函数使用;

vfork一定是先运行子进程,子进程exit或者执行了一个exec,父进程才会运行;
vfork只能用exit而不能用return;

exit和return的区别
exit是直接退出这个进程;
return会弹栈,销毁局部变量,返回上一级函数;

因为vfork的父子进程空间资源共享的,子进程使用return会破坏父进程的运行环境;

fork和vfork的区别


exec系列函数


C++总结

参考博客:
C++基础教程(总结)

较C添加的内容/特性

在这里插入图片描述
注:1983年夏,“带类的C”被正式命名为“C++”

类,派生类,
公有成员,私有成员
构造函数,析构函数
友元,内联函数(C++里面用来代替宏定义,现在C里面也有内联函数了)
赋值运算符重载

虚函数
函数运算符重载
引用
常量

保护成员,多重继承
赋值和初始化的递归
抽象类
静态成员函数
const 成员函数

模板
异常
类嵌套
命名空间

数据类型

1、基本数据类型
int,short,long,char
float,double,long double
bool(C++添加)
void

2、构造数据类型
指针类型,引用类型(取别名,c++添加)
数组,结构体,联合体,枚举,位域,类(C++添加)

共用体不能被引用;
结构体域在C++里面可以是函数;
结构体变量编译时只为变量域分配空间;
类对象(变量)编译时只为数据成员和虚函数(占4字节)分配空间;

数组和指针

???同C

字符串

string 字符串变量(c++添加)
字符数组
指正指向字符串


函数

内联函数,类似宏定义,直接替换而不跳转,提高运行效率,增加程序大小,现在C++里面用来替换宏定义函数的作用;现在C里面也有内联函数了;

函数重载
处理同一层次上函数名相同问题,返回值可以相同也可以不同,但是参数一定要个数或者顺序,或者类型不同;

函数覆盖
覆盖:覆盖发生在虚表中,看似无实际也无;
父子类都有的函数,父类函数位虚函数,函数名和参数完全相同;多态的关键技术;

函数隐藏
隐藏的定义:隐藏是指派生类的函数屏蔽了与其同名的基类函数;

1、父子类中有相同的函数名函数,父类中不是虚函数,则不管参数名是否相同,父类中函数都被隐藏;
2、父子类中有相同的函数名函数,父类中是嘘函数,则参数名不同,父类中函数被隐藏(参数相同就是覆盖);

那怎么能访问这些被隐藏函数呢???
1、子类需要声明使用这些函数,如下:
using Base::func;
结果就是,这些同名被隐藏函数除了同名同参函数,其他都被视为子类的重载函数;
2、也可以用父类作用词访问隐藏函数;
childobj.Base::func(…);


对象赋值和复制

???


友元

一个类的友元,可以访问该类的私有成员;
友元关系不能传递;

一个类的友元(函数或类),那么这个友元肯定是声明在该类中,即是有区别的放开私有成员访问权限;

友元函数
把普通函数为友元,这个普通函数可以访问该类私有成员;
把成员函数为友元,这个成员函数可以访问该类私有成员;
友元类
把一个类声明为友元类,这类可以访问该类的私有成员;


重载

函数重载
运算符重载
???


继承和派生

???
多继承的二义性,解决方法,虚继承,被继承类为虚基类;

虚函数和多态


输入输出流

标准输入输出流


模板

泛型编程基础;
模板函数
类似下面的定义:

template <typedef T>
T func(T arg) {
    
    
	// 函数体
}
//或者
template <class T>
T func(T arg) {
    
    
	// 函数体
}

是一个模板函数;

template <typedef T> // T shi 是模板形参,可以有多个,用逗号隔开
T func(T arg) {
    
    
	// 函数体
}
//调用
int a = func(10); //这时候模板形参 T 就会被替换成 int;

模板类
类似下面的定义:

template <class T>
class {
    
    
	T a;
	T func(T arg);
}

是一个模板类;

template <class T> // 模板形参可以有多个,用逗号隔开
class {
    
    
	T a;
	T func(T arg);
}
// 使用
class <int> a; //这时候泛型 T 就被替换成了 int;

模板形参
可以是数据类型,非数据类型,模板类型
1、类型形参

template <typedef T>

在声明或定义的时候,T只能被声明为数据类型,而函数或类内部的T直接被替换为该类型(有强转关系的这里先不讨论)
2、非类型形参

template <int a>

这里的a在声明或定义的时候,将会作为一个常量替换内部的a(有点像宏定义,但是有类型),这里的a可以的类型,只能是整形,指针,引用;

C++ 模板详解(一)


标准模板库STL

标准模板库
提供了通用的模板类模板函数
可以实现多种流行和常用的算法和数据结构(向量、链表、队列、栈…)


猜你喜欢

转载自blog.csdn.net/GeiGe123/article/details/114857925
今日推荐