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. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) B. TV Subscriptions 尺取法

    B2. TV Subscriptions (Hard Version) The only difference between easy and hard versions is constraint ...

  2. 修改官方发行openstack镜像的cloud-init登录方式为账号密码登录

    openstack使用的镜像多为qcow2格式,各个发行商也开源了针对openstack制作的镜像.但是这些镜像的登录方式都是注入用户名和密码的方式,就是说不能够直接通过账号和密码登录.那么如何将一个 ...

  3. linux下如何查看自己都装了什么服务

    service --status-all 先把rabbitmq进程杀掉 ps -ef | grep rabbitmq | grep -v grep | awk '{print $2}' | xargs ...

  4. Dockerfile命令整理

    通过Dockerfile只做Docker镜像时,需要用到Dockerfile的命令,收集整理如下,以便后续翻阅参考. FROM 功能为指定基础镜像,并且必须是第一条指令. 如果不以任何镜像为基础,那么 ...

  5. NXP官方ddr_stress_tester工具使用

    1.前言 NXP官方提供了一个DDR初始化工具,名称为ddr_stress_tester,该工具具有以下特点: 该工具能通过USB OTG接口与目标板进行连接,通过USB OTG接口完成DDR的初始化 ...

  6. html点击弹出QQ添加好友的窗口

    <a href="tencent://AddContact/?fromId=50&fromSubId=1&subcmd=all&uin=1377732948&q ...

  7. 图解Hyperf框架:Hyperf 的初始化

  8. WPF数据模板(7)

    数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...

  9. Markdown 基础学习

    Markdown是什么?    Markdwon是一种轻量级标记语言,它以纯文本形式(易读.易写.易更改)编写文档,并最终以HTLM格式发布.Markdown也可以理解为将以 MARKDOWN语法编写 ...

  10. django中视图函数中装饰器

    方法一 给指定方法加 from django.utils.decorators import method_decorator class xx(View): @method_decorator(装饰 ...