笔记--C++简介

C++的优点:
  封装性:把数据与操作数据的函数组织在一起,不仅使程序结构更加紧凑,并且提高了类内部的安全性;
  继承性:增加了软件的可扩充性及代码的重用性;
  多态性:使设计人员在设计程序时可以对问题进行更好的抽象,有利于代码的维护和可重用;

C++对C语言的扩展
  C++扩充的非面对对象新特性:
  
 一:C++的保留字:
   保留字是具有特定含义和用途的标识符,在程序中用户不能把保留字用作自定义的标识符。
   
 二:C++中的输入与输出:
   C++提供的标准输入/输出流cin和cout
   
   cin:用来处理标准输入;
       标准输入流:cin>>表达式>>表达式······
       >>为提取操作符,其作用为在输入流对象cin上实现从输入流中提前数据;
       表达式通常是用于存放输入值的变量;
       
   cout:用来处理标准输出;
        标准输出流:cout<<表达式<<表达式·······
        <<为插入操作符,其作用为在输出流对象cout上实现将输出项插入到输出流中输出到屏
        幕上;
        在插入运算符后面可以是任意复杂的表达式,系统会计算它们的值并传递给插入操作符;
        endl是一个操作符,其作用为插入换行符并刷新流;
    
   cerr:标准错误输出;
        与输出操作符(<<)一起用于输出错误信息到标准错误信息上;

三:全局变量的作用域运算符:
   C语言规定,每一个变量只在其作用域内有效。如果局部变量和全局变量同名,则在局部变量作用域内,
   全局变量将被屏蔽。
   为在局部变量作用域内使用同名的全局变量,C++提供了全局变量作用域运算符“::”来解决这个问题

四:常量的定义:
   C语言程序中常用define宏定义来定义常量;
   而C++尝使用const来进行常量定义;
   用const定义的常量具有类型,并且有地址,可用指针对其操作,但是程序中不能修改这个值;
   当用const修饰指针时,有以下三种情形:
   1:指向常量的指针,定义格式为:
     const类型标识符 *变量名=常量;
    或
     类型标识符 const*变量名=常量;
     如:
      const char *str="Hello";
      str是一个指向常量的指针,又称为常量指针。但是不能改变常量的值,
      str[O]='A';在C++中是错误的。指针str本身不是一个常量,而是一个变量;
      因此指针可以指向另一个常量,如:str="World";
   2:指针常量,定义格式为:
     类型标识符 *const指针变量名=常量;
     如:
     char *const str="Hello"
     str是一个常量,不能修改str的值。
     str="World";是非法的,str没有定义为指向常量,
     因此所指的值可以改变,如:str[1]='A';是合法的;
   3:指针本身和它所指向的对象都为常量,定义格式为:
      const 类型标识符 *const 变量名=常量;
      如:
      const char *const str="Hello";
     在此情况下,指针str本身是常量,不能指向Hello以外的字符串;并且str指向的对象也是常量;
     因此str="World";是非法的;str[1]='A';也是非法的;

五:变量的引用
  引用是指以别名的方式来使用另外一个变量(或常量)。引用和被引用变量(或常量)作用相同,它们具有相同的存储单元,只是名称不同,引用声明格式为:
  类型标识符 & 引用名;
  其中&为引用声明符,不是取地址。
  使用引用时,应注意以下方面:
  第一:创建一个引用时必须将其初始化成为对某一具体变量或常量的引用;
  第二:程序中不能改变对象,即不能改变成对另一变量或常量的引用;
  第三:对常量的别名引用必须是const类型的引用;
  如:
  int a,b;
  int &c=a;//c是a的一个引用,相当于给a取了一个别名为c
  const float pi=3.14;//给常量3.14取了一个别名为pi
  c=b;//非法操作,因为c不是a的引用,不能把a的别名变成另一个变量的引用

六:带缺省参数的函数
  C++中函数在定义时可以预先声明默认的形参值。调用时如果给出了实参,就用实参初始化形参,如果没有给出实参,就采用预先声明的默认形参值。C++的这种机制增加了函数使用的灵活性。

int sum(int a=1,int b=2)
{return a+b;}
void main()
{
	sum();//形参a和b都采用默认形参值,分别为1和2;
	sum(3);//形参a采用实参值3,形参b采用默认值2;
	sum(4,6);//形参a采用实参值4,形参b采用实参值6;
}

默认形参值一定要按照从右到左的顺序声明,在有默认形参值的右边不能出现无默认值的形参,
  这是因为函数调用时,实参初始化形参是按照从左到右的顺序进行的。
  此外,当函数调用在函数实现之前时,默认形参值要在函数原形中给出。

七:函数重载
  C++允许函数重载,函数重载指:多个函数具有相同的函数名,但形参的个数和类别不同,编译器可以根据实参和形参的类型及个数进行最佳匹配,自动确定调用哪一个函数。
  在使用函数重载时,应注意:
  第一:仅返回类型不同的函数不能重载;
  第二:若函数参数除其中一个是另一个类型的canst或引用外均相同,不能重载;

八:内联函数
  函数调用时系统要进行函数传递、保护断点、返回结果等操作,当函数需要频繁调用时,这类操作开销比较大,影响程序的执行效率。
  内联函数在进行函数定义或声明时,在函数头部最左边用inline关键字限定,则该函数就被定义为内联函数,程序调用该函数时,C++编译器便用该内联函数的函数体代码替换原来的函数调用,同时用实参替换形参。
  内联函数是以空间换取执行时间的效率;
  每次函数调用处都会用内联函数的函数体代码来替换,将增加程序的代码量,消耗更多的内存空间。
  使用时应注意:
  第一:内联函数的定义必须出现在第一次被调用前,最简单的方法是放在头文件中;
  第二:递归函数不能作为内联函数;
  第三:在内联函数中一般不能含有switch、while等复杂的控制结构;

九:new和delete运算符
  C语言采用malloc()和free()函数动态分配与释放存储单元;
  C++提供了简便而功能更强的new和delete运算符来分配与回收存储单元;
  使用new分配存储单元的格式为:
  new 数据类型名 T;//申请分配一个T类型的存储单元
  new 数据类型名 T[元素个数n];//申请分配n个T类型的连续的存储单元
  如:
  int *p;
  p= new int ;//申请分配一个整形单元,返回该单元地址赋给p
  char * Pa =new char[80];//申请分配80个char型的连续的存储单元
  要释放用new分配的空间,必须使用delete运算符,格式为:
  delete p;//释放p指向的单个存储单元
  delete[ ] Pa;//释放Pa指向的存储空间
  使用new分配存储单元系统会根据数据类型自动确定并分配所需的内存来存放指定类型的数据,返回存储单元的首地址。若无法分配到所要的内存,则返回0;
  用new分配单个存储单元时可以显示初始化存储单元,但使用new时不能自动对数组进行初始化;

从结构到类
 在C++中对结构体进行了扩展,C++的结构体可以包含函数。
 一:结构体定义
   C++结构体中可以有函数,称为成员函数;
   
 二:结构体与类
   C语言中,结构体是用struct声明的类;
   C++中的关键字为class;
   结构体默认情况下,其成员是共有的(public)的;
   类默认情况下,其成员是私有(private)的。
   在一个类中,公有成员是可以在类的外部进行访问的,而私有成员就只能在类内部访问了。

C++面向对象特性
 类是描述了一类事物,以及事物所应具有的属性;
 类的实例和类的对象是一个概念;
 对象是可以销毁的,类是不能销毁的。
 
 一:类与对象
   类是C++面向对象程序设计的基础,它把数据和作用在这些数据上的操作封装在一起;
   对象是类的实例,类抽象出了属于该类的所有对象的共同特性。
   从语言角度理解,类是一种自定义数据类型,而对象是具有这种类型的变量。
   类的定义:
   在这里插入图片描述
   类的成员函数:
   类成员的访问控制:
    类成员有三种访问权限,分别是public(公有)、protected(保护)、private(私有);
    具有公有属性的成员是类的接口,在类外只能访问类的公有成员;
    具有私有属性的成员完全隐藏在类中,来自类外部的任何访问都是非法的;
    具有保护属性的成员其访问性质与私有成员类似;
    以上均只针对类外访问成员而设立的;
   类的对象:
    C++中类的对象就是该类的一个特定实体,一个对象就是类的一次实例化;
    
 二:构造函数
   构造函数point是类的一个特殊成员函数,该函数没有返回值,类名就是其函数名,且该函数的访问控制属性是公有。
   其作用为对对象本身做初始化操作;

三:祈构函数
  当一个对象的声明周期结束时,我们应该去释放这个对象所占有的资源,这个可以通过祈构函数来完成;
  祈构函数的定义格式为:~类名()
  祈构函数是一个“反向”的构造函数,不允许有返回值,不允许带参数,并且一个类中只能有一个祈构函数;
  用于清除类的对象;
  当一个类的对象超出它的作用范围,对象所在的内存空间被系统回收,或在程序中用delete删除对象时,祈构函数将自动调用;
  对一个对象来说,祈构函数是最后一个被调用的成员函数;

C++的类的继承与多态
 C++中,在一个已有类的基础上增加或修改少量代码而得到另一个新类;
 这样新类就可从已有类那里得到已有的特性,称为类的继承;

发布了15 篇原创文章 · 获赞 9 · 访问量 7951

猜你喜欢

转载自blog.csdn.net/weixin_44171004/article/details/88540495