C++面向对象程序设计学习笔记(2)
C++在非面向对象方面的扩充
C++向下兼容C语言,因此C语言中的语法在C++中依然成立
输入输出
C++添加了标准输入流对象cin和标准输出流对象cout来进行输入输出,
例:
#include<iostream>
using namespace std;
int main()
{
int a;
cin>>a;
cout<<a<<endl; // endl 等价于 '\n'
}
灵活的局部变量声明
C++允许变量声明与可执行语句在程序中交替出现
结构、联合、枚举名可直接作为类型名
const修饰符
c++可使用const修饰符来代替宏定义#define来定义常量,与#define不同,const下定义的常量有类型,占用存储单元,有地址,可用指针指向它,但不能进行修改。
例:
const int N=105;
const修饰符也可以与指针一起使用,可组合成三种:指向常量的指针,常指针和指向常量的常指针。
+指向常量的指针
指向常量的指针是指一个指向常量的指针变量。
例:
const char *name="one";
对该指针来说,该指针变量指向一个常量,因此不能改变该常量的内容。
例:
name[0]='c'; //错误
但是可以将该指针指向另一个常量。
例:
name="other"; //允许
+常指针
常指针是指把指针所指的地址,而不是它指向的对象声明为常量。
例:
char *const name="one";
对该指针来说,该指针为常指针,因此该指针所指的地址不能改变,但是地址中的数据可以改变。
例:
name[0]='c';//允许
name="other";//错误
+指向常量的常指针
指向常量的常指针是指这个指针本身不能改变,它所指向的地址中的数据也不能改变。
例:
const char *const name="one";
对该指针来说,一下两种语句都是错误的。
例:
name[0]='c';//允许
name="other";//错误
对const修饰符来说,关键字int可以省略。
函数原型
对C++来说,函数在调用之前必须对所调用的函数作函数原型声明。
函数原型的参数表中可以不包含参数的名字,而只包含它们的类型。
内联函数
在声明函数前加入关键词"inline",即可声明该函数为内联函数,内联函数可在编译时将该函数插入调用语句中,以减少函数调用,提高运行效率,内联函数中一般不能含有复杂的控制语句,如for和switch等,只有小规模的函数才应该定义为内联函数。
带有默认参数的函数
C++允许在声明函数原型时,为形参指定默认值,当调用该函数时,可忽略指定默认值的实参,C++自动将默认值作为相应参数的值,在定义时,指定默认值的参数必须放在形参列表的最右端。
函数的重载
对多个作用相似的函数,可起一个共同名字,包括不同的参数类型,在调用时,通过传递的参数来调用不同的函数,具体内容在见下文。
作用域控制符::
在通常情况下,如果有两个同名变量,一个是全局的,一个是局部的,那么局部变量在其作用域中具有较高的优先权。
若希望再局部变量作用域中使用全局变量,可在变量前加::,作用域控制符对c++而言具有更多的意义,具体内容在见下文。
无名联合
无名联合是C++中得一种特殊联合,它在关键字union后面没有给出联合名,它可使一组数据成员共享同一内存地址,
如:
union
{
int a;
double b;
}x;
对无名联合,调用该类型数据需要访问无名联合中的数据成员
如:
cout<<x.a<<' '<<x.b<<endl;
强制类型转换
C++可使用下列方式来进行对数据类型的转换
(int)a;
int(a);
运算符new和delete
C++向下兼容malloc和free,除此以外,也可用new和delete来申请和释放内存
new用与内存分配的最基本形式为:
指针变量名=new 类型;
delete释放内存的最基本形式为:
delete 指针变量名;
new为数组动态分配内存空间需要在类型后面缀上数组大小,如:
int *p=new int[2];
new可为简单变量分配内存的同时,进行初始化,基本形式为:
指针变量名=new 类型(初值);
使用delete释放动态分配的数组时,可用:
delete []指针变量名;
引用
概念:
作用是为一个变量另起一个名字,变量的引用通常被认为是变量的别名。当声明一个引用时,必须同时用另一个变量名字来将它初始化,即声明它代表哪一个变量,是哪一个变量的别名,对一个引用的操作,实际上就是对其代表的变量的操作,声明一个引用的格式如下
类型 & 引用名 = 已定义的变量名;
引用在初始化后不能重新声明为另一个变量的引用。
引用作为函数参数:
通过引用作为函数参数的作用与采用指针变量作为函数参数的效果是一样的,但引用作为参数的表达更加清晰。
使用引用返回函数值:
采用引用返回函数值可以将该函数调用放在赋值运算符左边,例:
#include<iostream>
using namespace std;
int a[10]={1,2,3,4};
int &index(int x)
{
return a[x];
}
int main()
{
cout<<a[1]<<endl;
index(1)=3;
cout<<a[1]<<endl;
}
输出结果为:
2
3
enum 枚举
枚举是 C 语言中的一种基本数据类型
枚举语法定义格式为:
enum 枚举名 {枚举元素1,枚举元素2,……};
注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。可通过定义任意枚举成员值来影响整个序列。
例
enum
{
A,B=2,C //A=0,B=2,C=3
};