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
};

C++面向对象程序设计学习笔记(2)的更多相关文章

  1. C++面向对象程序设计学习笔记(1)

    基本概念 对象: 面向对象程序设计中,对象是描述其属性的数据以及对这些数据施加的一组操作封装在一起构成的统一体,每个对象都是由数据和操作代码两部分构成的. 类: 面向对象程序设计中,类是具有相同的数据 ...

  2. C++面向对象程序设计学习笔记(6)

    多态性 编译时的多态性与运行时的多态性 在面向对象方法中,所谓多态性就是不同对象收到相同信息时,产生不同的行为.在c++程序设计中,即"一个接口,多种方法" 在C++中,多态性的实 ...

  3. C++面向对象程序设计学习笔记(7)

    模板与异常处理 模板的概念 模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型作为参数. 模板分为函数模板和类模板,它们分别允许用户构造模板类和模板函数 函数模板与模板函数 函数模板实际 ...

  4. C++面向对象程序设计学习笔记(5)

    派生类与继承 概念 继承允许编程者在已有类的基础上创建新的类,可以从一个或者多个已有类中继承函数和数据,并重新定义或者添加新的函数和数据,已有类称为基类或父类,新类称为派生类和子类. 声明 声明一个派 ...

  5. C++面向对象程序设计学习笔记(4)

    类与对象(2) string类 C++不仅向下兼容C的字符表示方法,也声明了一种更方便的字符串类型,即string类. 想要使用string类,必须包括头文件string,即要声明 #include& ...

  6. C++面向对象程序设计学习笔记(3)

    类与对象(1) 结构体与类 结构体的扩充 C++对结构体进行了扩充,它不仅可以含有不同类型的数据,还可以含有函数,结构体的函数可以像访问结构体中的数据一样进行访问. 类的声明 声明类的方法与声明结构体 ...

  7. 20145213《Java程序设计学习笔记》第六周学习总结

    20145213<Java程序设计学习笔记>第六周学习总结 说在前面的话 上篇博客中娄老师指出我因为数据结构基础薄弱,才导致对第九章内容浅尝遏止地认知.在这里我还要自我批评一下,其实我事后 ...

  8. Java程序设计学习笔记(一)

    时间:2015-6-2 23:04 程序员,程序猿,程序媛,码农 -------------------------------------------------------   --Java的应用 ...

  9. JavaScript高级程序设计---学习笔记(二)

    面向对象程序设计1.属性类型.定义多属性.读取属性特性对象的属性在创建时都带有一些特征值,JavaScript通过这些特征值来定义它们的行为.这些特性是为了实现JavaScript引擎用的,因此不能直 ...

随机推荐

  1. 洛谷P2508 [HAOI2008]圆上的整点

    题目描述 求一个给定的圆$ (x^2+y^2=r^2) $,在圆周上有多少个点的坐标是整数. 输入格式 \(r\) 输出格式 整点个数 输入输出样例 输入 4 输出 4 说明/提示 \(n\le 20 ...

  2. h5移动端页面强制横屏

    说明:这个的原文章来自于https://www.jianshu.com/p/9c3264f4a405  ,我做点点补充  ,谢谢原链接的小姐姐 最近公司是要我做一个h5的小视频,因为是视频接视频,并且 ...

  3. R语言两自定义矩阵的基本运算-实例

    #sink("matrix_history.txt") cat("请输入矩阵的行和列数,“,”号隔开,建议行 等于列 数:") number<-scan( ...

  4. 解决 ubuntu 开机卡死在输入密码界面 && 键盘鼠标失灵!!

    近期不知安装了什么package,导致 ubuntu 开机后键盘鼠标一直没法用,刚开始以为是 ubuntu 桌面环境崩溃了,后来发现系统能显示连接到网络.时间也在运行,那应该就是键盘鼠标失灵了. 网上 ...

  5. 06Shell并发控制

    并发控制 文件描述 文件句柄 File Descriptors (FD,文件描述符)或 文件句柄: 进程使用文件描述符来管理打开的文件 注意 1.如何通过exec打开一个文件 exec 数字<& ...

  6. Windows重要的win键

    win+↓ 当前窗口操作,多按几下就缩没了(同理,其他箭头也一样) win+e 打开此电脑 win+v 展开剪切板 win+k 访问蓝牙 win+a win10的通知 win+d (切到桌面,再用能切 ...

  7. cmake打印shell

    cmake链接库失败时,可通过打印路径下对应的lib来定位问题 execute_process(COMMAND ls -lt ${CMAKE_CURRENT_SOURCE_DIR}/lib #执行sh ...

  8. rsync性能终极优化【Optimize rsync performance】

    前言 将文件从一台计算机同步或备份到另一台计算机的快速简便的方法是使用rsync.我将介绍通常用于备份数据的命令行选项,并显示一些选项以极大地将传输速度从大约20-25 MB / s加快到90 MB ...

  9. Python - 条件控制、循环语句 - 第十二天

    Python 条件控制.循环语句 end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: Python 条件语句是通过一条或多条语句的执行结果(True 或 ...

  10. Java构造函数执行顺序

    首先执行基类的构造函数 然后执行派生类的构造函数之外的初始化语句 最后执行派生类的构造函数 在Java中,如果派生类构造函数需要调用基类的构造函数,那么基类构造函数必须作为派生类构造函数的第一句话.在 ...