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.继承过程的同名覆盖原则:
当派生类的成员与基类的成员同名时,若没有强行指名,则通过派生类对象使用的同名成员是派生类中的同名成员。
如果要通过派生类对象访问基类中被覆盖的同名成员,则需要使用基类名限定。(基类::成员名)
作用域:作用域是标示符在程序中有效的范围。可以引用的范围。作用域分为:局部作用域(块作用域),函数作用域,函数原型作用域,文件作用域和类作用域。
局部作用域:当标识符的声明出现在由一对花括号所括起来的一段程序(块)内时,该标示符的作用域从声明点开始,到块结束为止,该作用域的范围具有局部性。
{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.继承过程的同名覆盖原则:
当派生类的成员与基类的成员同名时,若没有强行指名,则通过派生类对象使用的同名成员是派生类中的同名成员。
如果要通过派生类对象访问基类中被覆盖的同名成员,则需要使用基类名限定。(基类::成员名)
相关文章推荐
- [Linux][入门系列]CentOS 的基础使用-yum使用手册(下):yum安装高版本软件
- Linux 软件系列之十三——网络基础
- LinuxC/C++编程基础(27) “心跳”信息的处理
- LinuxC/C++编程基础(18) 视频关键帧长度和宽度的解析(续)
- [基础知识]Linux新手系列之三
- 微软软件实现技术授课系列内容之二:C++ Best Coding Practice
- [基础知识]Linux新手系列之四
- Linux-基础常用命令和常用软件
- Linux基础vim编辑器系列——right ctrl + o
- 【C++基础之十五】内联函数
- C++基础学习系列——前言
- 【C++自我精讲】基础系列四 static
- 跟我一起来学ORACLE开发系列之二:常用Linux命令基础
- linux高级编程基础系列:线程间通信
- LinuxC/C++编程基础(23) 使用thrift/rpc开发简单实例(续1)
- LinuxC/C++编程基础(24) 使用thrift/rpc开发简单实例(续2)
- C++基础系列:访问控制与继承
- LinuxC/C++编程基础(10) quicksort的简单实现
- c/c++基础(一) 字符串系列-外加mem处理