您的位置:首页 > 编程语言 > C语言/C++

C/C++基础知识总结3

2014-06-16 15:30 357 查看
1、变量的定义与声明

声明是主要表明变量的类型和名称,但是不会申请内存;定义是申请内存。只能定义一次,但是可以声明很多次。

int  a ;   extern int a;     extern  int a =1;//为定义

2、C++中变量的存储类型

auto:局部变量,属于动态存储类型

static:在程序运行中始终占有存储空间,只能在它的作用域范围内使用。函数中的局部静态变量,下次调用时,能取得上次预算后的值。

extern:外部变量,全局变量。一处定义,多处声明。

register:寄存器变量,属于动态存储类型,说明变量存储在寄存器中,而不是内存中,一般由编译器自身优化选择

3、C++中的内存分配

栈:局部变量,函数参数,返回地址。需要时候申请,系统自动回收

堆:new  malloc 需要人为的释放,或者程序结束后由系统回收

全局/静态存储区:全局变量,静态变量,字符串常量等

代码区:函数和代码

4、C++的输入输出

对标准设备的输入输出:标准I/O

对外存磁盘上的文件输入输出:文件I/O

对内存中指定的字符串存储空间的输入输出:串I/O



5、操作符重载复习

如果要为类重载操作符,并且将非类的项作为其第一个操作数,则可以用友元函数来反转操作数顺序。

常用的友元操作符重载:<<

调用cout<<A应该使用的是cout对象本身,而不是它的拷贝,因此,应该按照引用来传递cout,并且返回cout的引用,这样就可以连续输出了

friend istream& operator>>(istream& , Love&);


6、数组指针和指针数组

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int (*p)[3]; //是数字指针,指向一个数组的指针
p=a;

int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int *p[3]; //数组指针,数组的元素由指针组成
for(int ix=0;ix<3;ix++)
 p[ix]=a[ix];


7、函数指针和指针函数

int fun(int x);
int (*f)(int x);  //函数指针,指向函数的指针,可以用此来调用函数
f=fun;


int *fun(int x);   //指针函数,返回指针的函数


8、C++ public protected and private 区别 

访问权限:

public 公共接口 :向外界开放,可通过对象或类名访问

protected 受保护的访问:只向子类开放访问权限 ,不可通过对象访问

private私有 :只有类成员可以访问,外界不可以通过任何形式访问

继承关系:

public继承:父类成员的访问权限在子类中不变,仍为自己原来的权限。

protected继承:父类的public成员访问权限在子类中变为protected;父类的protected成员和private成员在子类权限维持原来的权限不变

private继承:父类的所有成员访问权限在 子类中变为private

     其中,public继承是is-a的关系,可以用父类的指针引用指向子类的对象;protected和private继承没有is-a的关系,只表示“组合”或者“拥有”的关系,不可以用父类的指针或引用指向子类对象。

    C++对象模型中,子类对象的内存空间中包含父类的部分,当用父类指针指向一个子类的对象实时,这个指针可以访问的是相应的父类那部分的内存;在protected和private继承的情况下,父类的内存部分是私有的,不对外开放的,所以,protected和private继承时,不可以用父类的指针或引用指向子类对象。

    通过对象访问成员时,只能访问到共有(Public)成员。

    需要禁止类以构造形式实例化类的时候,可以将类的构造函数声明为private 和protected 的形式。构造函数声明protected 的形式的类不能被直接实例化,但可以通过被继承,子类可以在实例化的时候调用父类的protected构造函数。

  构造函数声明为private的类的实例化不能依赖构造函数,可以提供public 的Instance()的方法,在Instance()定义中调用构造函数,返回类的实例。单例模式就是利用这个原理。

9、友元

友元函数:友元函数的特点是能够访问类中的私有成员的非成员函数。

友元类:友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员)。


10、类中static

类中static数据成员被类所有的对象共享,包括类的派生类。调用时与对象调用普通成员一样

类的静态成员可以成为成员函数的可选参数,普通成员不可以。

类的静态成员的类型可以是所属类的类型,普通成员不可以。普通成员只能声明为所属类类型的指针或引用。

类的静态方法只能访问类的静态成员。

11、多态

动态多态:即通过继承和虚函数方式,基类指针指向派生类,运行时采用迟绑定技术,根据实际对象来选择要调用的函数。

静态多态:泛型式编程。

函数多态:即函数重载

宏多态:宏展开

12、重载、覆盖、隐藏

重载:发生在一个类中的,函数名相同,参数不同

覆盖:父类和子类之间的,基类必须为虚函数,函数名和参数都相同

隐藏:父类和子类之间的,(1)函数名相同,参数不同,无论有无virtual,子类都会覆盖父类。(2)函数名相同,参数相同,父类没有virtual,父类会被子类覆盖
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: