C++与C完全兼容。但由于与C兼容,使得C++不是纯正的面向对象的语言,既支持面向对象,又支持面向过程
#include //包含头文件
//程序输入输出用的是cin cout输入输出流
void main()
{
int x;//给4个字节的空间
cin>>x;//键盘输入值并赋给变量x
cout<<"\nx="<<x<<endl;//输入x的值并换行 endl是独有的换行符
}
//cin和cout是C++预定义的流对象,分别代表标准输入设备(键盘)和标准输出设备(显示器)
//必须加输入输出头文件
//输入流cin可以获得多个键盘的输入值
--提取运算符>>可以连续写多个
--能自动将输入输出转化为类型对象
//输出流cout可以输出一个整数、实数、字符及字符串
--插入运算符<<可以连续写多个
cout<<"oct\t"<<oct<<Num<<endl;//八进制数输出
cout<<"hex\t"<<hex<<Num<<endl;//16进制数输出
cout<<setw(5)<<a<<endl;//右对齐 占5位
未接触过的数据类型
基本类型
VC++6.O中
interger整型:
1.字符型char(字符型跟每一个ASCI码值是对应的) 一个字节
2.逻辑型bool(true代表1 false代表0) 一个字节
3.短整型short 两个字节
4.长整型long 四个字节
5.int型 四个字节
(1 3 4 5还包括无符号类型)
…
floating实数:
1.单精度型float
2.双精度型double 八个字节
3.长双精度型long double 八个字节
带小数点的数默认是double型
非基本类型
1.枚举型enum
2.数组型
3.指针非空数据类型
4.空类型void
5.结构体类型struct
6.共用体类型union
7.类class
引用
定义一个变量 给变量建立一个引用即一个别名
建立引用 程序用另一个变量或对象的名字初始化它
例:
int someInt;
int& rInt=someInt;(这个引用不能为空 必须代表某一对象)
//引用在定义的时候一定要说明它的初始化是哪一个目标
//rInt是对整数的引用,不是值不占存储空间
!!对引用的改变实际上就是对目标的改变 二者共用一块存储内存!!
C++建立引用是为了扩充函数功能 函数的作用结果直接影响主函数的话,用引用作为参数非常有效
C++函数使用
函数定义:函数头+函数体
调用函数先定义后调用!!
注意:只有当函数被调用时 系统才会给形参分配内存。函数调用结束后,形参被分配的内存被释放
全局变量与局部变量
注意:函数未被调用时,函数的形参并不占有内存空间
函数参数传递:
1.值传递 2.地址传递(指针) 3.引用传递(引用)
**引用传递跟指针传递起到相同的效果
不同的是:
引用是某一对象的别名 而指针是某一变量的地址(系统也为指针分配地址)
带默认形参值的函数:
允许在函数的声明或定义时给一个或多个参数指定默认值(和Python中的默认参数用法差不多 但是也有不同)
Example:void display(int i=1000);//函数声明
//定义(另外不能再定义的时候给默认值)
调用时如果对应位置不给出实参值 就用那个默认值
默认参数应严格从右向左逐次定义和指定,中间不能跳开(不灵活。。)
内联函数:不是在调用时发生转移 而是在编译时将内联函数体嵌入到每一个调用语句中
节省了系统开销 这要明白内联函数的调用机制
inlinr int max(int a,int b)
–一般把简单且使用频率很高的函数才说明为内联函数,不能实现递归操作
重载函数:C++多个同名函数 调用根据参数的不同 选择调用哪个函数(应该类似于继承类中函数的重载重写吧。)
面向过程:模块分解分而治之 按功能分成若干个基本模块
程序=数据结构(队列 栈。。。)+算法
我觉得主要还是由于没有提供手段来限制数据结构可被操作的范围
还有是一根线,比如写一个图形界面,我们无法进行完全操作
面向对象:重用性 拓展性 灵活性
对象: 一组数据及其相关操作的封装体
类通过一个简单的外部接口与外界发生关系
程序=对象(包括数据结构和算法)
//在数据抽象内部组织过程抽象
class CStudent //学生类
{
private:(不一定是这个限制符)
//属性
public:(不一定是这个限制符)
//构造方法
//各种方法
}
void main()
{
//实例化
//通过.进行属性方法调用
}
优点:
–模块间关系简单 模块独立、模块数据安全
–通过继承可重用
类与对象的关系:类 <=> 对象
抽象定义<=>实例
例如: 学生<=>学生Wq
PP模板<=>有这个模板做出的文件
类相当于一种特殊的用户自定义的数据类型
类中可以包含一组相关的数据(类似结构体),还包括能对这些数据进行操作的函数。
类的声明
class 类名
{ private://私有成员 (只能被本类成员函数、友元函数 存取和调用)
私有数据成员及成员函数的说明或实现
protected://保护成员 (可被本类、本类的派生类的成员函数访问)
保护数据成员及成员函数的说明或实现
public://公有成员,外部接口 (可被本类意外的函数访问 是类与外部进行交换的接口)
公共数据成员及成员函数的说明或实现
}
如果只给出了成员函数的声明
<各个成员函数的实现>//类的实现部分
~~关键字public protected private称为访问权限修饰符 限制类成员的访问控制范围 也可以限制类中函数的访问控制范围吧???
默认为private
代码:
定义一个矩形类
class CRectangle
{ private:
int x,y,weight,high
public:
void SetValue(int xx,int yy,int w,int h);
int Area()
//类里面的成员访问受到访问权限控制符的控制
//类中的数据成员是**自身类的对象**是不允许的,而可以定义自身类的**指针或引用**
//因为指针在定义的时候不是根据的数据类型的内存来分配大小,它所分配的都是个无符号整型
}
class CRectangle
{public:
void Area()
...
private:
CRectangle obj1;//False
CRectangle *obj2;//OK
int x(4),y(5);
//类在定义的时候是不能对数据成员进行初始化的
如何定义成员函数
1)在类外定义成员函数
类体内给出成员函数的原型声明,说明该成员函数的形参和返回值类型,类外给出实现
定义成员函数形式如下:
<类型标识符> <类名>::<成员函数名>(<形参表>)
{<函数体>}
双冒号是作用域运算符 指出成员函数属于哪个类
预防类中函数同名情况
2)讲在类外定义inline成员函数
inline <类型标识符> <类名>::<成员函数名>(<形参表>)
{<函数体>}
酱紫
3)类外定义带默认参数的成员函数
① 合法性:前面已讲
② 类成员函数的默认值只能在声明的时候给 如果函数的实现代码放在外部,这时候是不能给默认值的
对象和类的关系相当于变量与普通数据类型的关系
类是一种逻辑抽象概念,声明一个类只是定义了一种新的数据类型,说明对象才真正创建了这种数据类型的物理实体(分配存储空间)
由同一个类创建的对象具有相同的数据结构
一般语法:
class 类名
{
....
}
对象1[,对象2,...]
类名 对象1[,对象2,...]
//一个类可以声明对个对象 对象之间代码共享 数据独立
//一般使用后者进行定义对象
对象的引用
1)<对象名>.<共有数据成员名>
<对象名>.<共有成员函数名(实参表)>
class CRectangle
{
//定义数据成员 声明成员函数
}
//成员函数外部定义 注意形式
//声明类的对象引用 通过.进行访问
2)定义指向对象的指针访问对象中的成员
class CRectangle
{ int x,y;
public:
int weight,high;
};
CRectangle a,*p;
p=&a;
cout<<p->weight;
cout<<(*p).weight
//p指向那个对象 间接引用那个对象 用.访问
//如果weight定义为private那就没法访问
3)通过对象的引用变量访问对象中的成员
class CRectangle
{ int x,y;
public:
int weight,high;
};
CRectangle a;
CRectangle &b=a;
cout<<a.weight;
//思考:引用可以直接调用private成员吗?
//不可以:只要在类的外部访问就只能访问它的公有部分