C++学习第一天——初识C++

C++与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成员吗?
 //不可以:只要在类的外部访问就只能访问它的公有部分

你可能感兴趣的:(C++)