您的位置:首页 > 运维架构 > Linux

Linux 软件系列之十五——C++基础

2014-01-03 21:48 260 查看
1.作用域和可见性

作用域:作用域是标示符在程序中有效的范围。可以引用的范围。作用域分为:局部作用域(块作用域),函数作用域,函数原型作用域,文件作用域和类作用域。

局部作用域:当标识符的声明出现在由一对花括号所括起来的一段程序(块)内时,该标示符的作用域从声明点开始,到块结束为止,该作用域的范围具有局部性。

{int a;a++;}

特例:for(int i=0;i<3;i++)

函数作用域:标号是唯一具有函数作用域的标示符。标号声明使得该表示符在函数内的任何位置均可以被使用。goto语句使用标号。

main(){goto s;

s:

return;}

函数原型作用域:函数原型声明(不是函数定义)中所做的参数声明在该作用域中。这个作用域开始于函数原型声明的左括号,结束于函数声明的右括号。(例子中的a)

void show(int a);

文件作用域:文件作用域是在所有函数定义之外说明的,其作用域从其说明点开始,一直延伸到文件结束。

int a;

main(){}

类的作用域:一个类的所有成员位于这个类的作用域内,类作用域是指类定义范围和相应的成员函数定义范围。在该范围内,一个类的成员函数对同一类的数据成员具有无限的访问权限。

可见性:可见性从另一个角度表现标识符的有效性,标识符在某个位置可见,表示该标示符可以被引用。可见性与作用域是一致的。作用域指的是标识符的有效范围,而可见性是分析在某个位置标示符的有效性。

可见性在分析两个同名标示符作用域嵌套的特殊情况时,非常有用。在内层作用域中,外层作用域中声明的同名标示符是不可见的,当在内层作用域中引用这个表示符时,表示的是对内层作用域中声明的标识符的引用。在内层的作用域结束后,次外层的作用域又变的可见了。

{

int i=10;

{

int i=11;

}

}

外层的i在最外层的大括号内都是具有作用域,但是由于内层大括号中又定义了i,所以外层i在内层的可见性就被屏蔽掉了。

2.生命期:

生命期也叫生存期。生命期与存储区域密切相关。存储区域主要有代码区、数据区、栈区和堆区。对应的生命期为静态生命期、局部生命期和动态生命期。

静态生命期:这种生命期与程序的运行期相同,只要程序一开始运行,这种生命期的变量就存在,当程序结束时,其生命期就结束。具有文件作用域的变量,以及静态变量(变量前加static关键字的变量)都具有静态生命期。

局部生命期:在函数内部声明的变量或者在块中声明的变量具有局部生命期。这种变量的生命期开始于程序执行经过其声明点时,而结束于其作用域结束处。具有局部作用域的变量具有局部生命期。

动态生命期:这种生命期由程序中特定的函数调用(malloc(),free())或操作符(new,delete)来创建和释放。

3.C++程序文件后缀必须是“.cpp”,编译指令是“g++”。

4.C++中,同一个类定义多个对象时,每个对象拥有各自的数据成员(不包括静态数据成员),而所有对象共享一份成员函数和一份静态数据成员。静态数据成员是类的所有对象中共享的成员,而不是某个对象的成员,因此,可以实现多个对象间的数据共享。

静态数据成员的使用方法:

1)静态数据成员的定义要在前面加上static关键字

2)静态数据成员是静态存储的,必须对它进行初始 化。

3)静态数据成员的初始化与一般数据成员不同, 静态数据成员初始化的格式如下:

类型名 类名::静态数据成员 = 值;

在类外实现初始化。

4)引用静态数据成员的格式:

类名::静态数据成员

静态成员函数

静态成员函数的定义是在一般函数定义前面加上static关键字。静态成员函数不与任何对象相联系,所以不能对非静态数据成员进行默认访问。

调用静态函数的格式为:类名::静态成员函数名(参数表);

5.三种继承方式

public(公有继承)

派生类中的成员可以访问基类的public成员和protected成员,但不能访问基类的private成员。

派生类的对象只能访问基类的public成员。

protected(保护继承),private(私有继承)

派生类中的成员可以访问基类的public成员和protected成员,但不能访问基类的private成员。

派生类的对象不能访问基类的任何成员。



6.派生类的构造函数和析构函数

声明构造函数时,只需要对本类中新增成员进行初始化,对继承来的基类成员的初始化由基类完成。

单一继承的派生类的构造函数格式:

派生类名::派生类名(基类所需的形参,本类所需形参):基类(形参)

{

初始化赋值语句;

}

构造函数按以下顺序被调用:

1)基类的构造函数。按照被继承的顺序调用。

2)成员对象的构造函数。按照声明的顺序调用。

3)类自己的构造函数。

4)多继承时候,父类的继承顺序与继承时指定顺序一致。

7.继承过程的同名覆盖原则:

当派生类的成员与基类的成员同名时,若没有强行指名,则通过派生类对象使用的同名成员是派生类中的同名成员。

如果要通过派生类对象访问基类中被覆盖的同名成员,则需要使用基类名限定。(基类::成员名)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: