c++速成,适合有c基础的朋友(3)

7.字符串和向量
   a.字符串是一种数组类型
     %1.c字符串值和c字符串变量
        假定字符串是"hello",则需要一个6个引索变量的字符数组,最后一个位置用来存放‘\0‘。‘\0‘为一个空字符,用于表征字符串的结束。
        注意:以下两个声明方式并不一致:
        char short_string[] = ‘abc‘;
        char short_string[] = {‘a‘,‘b‘,‘c‘};
        前者会在abc后有一个‘\0‘,而后者却没有。
        注意:char a[3];
              a="er";  //这一语句是非法的。对于字符串,除了在声明时可以赋值之外,不能以这样的方式赋值。
        想要调用c++提供的字符串函数,需要#include <cstring>
        atoi函数可以将字符串转为数字。eg:atoi("1234");  //将返回整数1234。 使用需要 #include<cstdlib>
   b.标准string类
     %1.标准string类简介
        想要使用string类,必须包含:
        #include<string>
        using namespace std;
        声明方式:
        string noun = "name";
        phrase = "I love "+ noun +"!";
        string s1 ,s2("hello");
     %2.string类的I/O
        考虑如下代码
        string c1 , c2;
        cin >> c1 ;
        cin >> c2 ;
        如果用户输入: May the hair on your toes grow long and curly!
        这样s1获得May,s2获得the;
        如果希望程序将整行输入读入一个string类型的变量,那么可以使用getline函数。在#include<string>下:getline的用法有所不同,不能使用cin.getline
        而是:string line;
              getline(cin,line);
        cin与getline的混用可能会出现问题。
     %3.可以用string类进行字符串处理
        string类中包含一些成员函数,利用这些函数可以简化字符串的处理。string定义的字符串,可以用数组的访问方式访问。
     %4.将string类转换为c字符串:
         eg:char a_c_string[];
            string string_variable = "cstring";
            strcpy(a_c_string,cstring.c_str());
   c.向量:
     %1.向量的基础知识
      为了将变量v声明为基类型为int的一个向量,如下:
      #include <vector>
      vector<int> v;
      向量的索引号从零开始,虽然可以用v[i]来访问向量中相应位置的值,可是无法用这种方式对他进行初始化。要为相应的索引位置首次添加值,要使用成员
      函数push_back。在向量中添加元素是要依次添加,首先添加位置0,位置1,位置2;
      eg:vector<double> sample;
         sample.push_back(0.0);
         sample.push_back(1.1);
         sample.push_back(2.2);
      向量中的元素个数称为向量的长度(size),可以用成员函数size判断向量中有多少个元素。

8.指针和动态数组:
   a.指针:指针是内存变量的地址
     %1.指针变量
        double *p;                //声明了一个指向double型变量的指针。
        int *p1,*p2,v1,v2;        //可以将指针和普通变量一起声明。
        下面的语句可以让指针指向变量:
        p1=&v1;
        在此之后*p1和v1拥有完全同样的属性。异
        指针中注意对于*和&的使用。时刻注意p1=p2;与*p1=*p2的差别。                        操作符new?
     %2.基本内存管理
        操作符delete可以销毁一个变量,将他占用的空间返还给自由存储。
        eg: delete p;
        编程时可以定义指针类型:
        eg: typedef int* IntPtr;
            IntPtr p;                //这里与int *p是等价的;
   b.动态数组   动态数组是写程序时不指定长度的一种数组,他的长度实在程序运行时确定的。
     %1.数组变量和指针变量
        int a[10];
        int *p;
        p=a;
        p[0],p[1],...与a[0],a[1],...有相同的作用。
     %2.创建和使用动态数组
        double *a;
        a=new double[array_size];   //array_size是一个int型的变量,其值在程序运行的过程中给出。
        delete [] a;                //销毁动态数组。
 
9.定义类
   a.结构
   %1.用于异种数据的结构:
      结构定义如下:
      struct CDAccount
      {
          double balance;
          doubel interest_rate;
          int term;
      };//注意这个地方的分号
      其中关键字struct宣布这是一个结构类型定义。标识符CDAccount是结构类型的名称。两个或更多的结构类型可以使用相同的结构名称。
   %2.结构作为函数参数
      对于一个函数来说,它可以有结构类型的传值调用参数,或者结构类型的传引用参数。
      函数的返回值也可以是一个结构。
      eg: CDAccount shrink_warp(double the_balance,double the_rate,int the_term)
          {
               CDAccount temp;
               ...
               return temp;
          }
   %3.对结构进行初始化
      struct Date
      {
        int mouth;
        int day;
        int year;
      };  
      Date due_date = {09,06,2015};
   b.类
   %1.定义类和成员函数
   类(class)是一个数据类型,它的变量就是对象。
   eg: class DayOfYear
       {
        public:
           void output();
           int day;
           int month;
       };  //注意此处的分号
   void函数可以在c++文件中定义,定义的方式是
   void DayOfYear::output()
   {
       cout << "month=" << month
            << "day=" << day << endl;
   }
   类的声明方式:DayOfYear today;
   调用函数的方式是 today.output();
   %2公共成员和私有成员
   私有成员即除非在一个成员函数的定义内,无法在程序的任何地方直接访问他们。私有成员的定义方式是:
   class DayOfYear
   {
    public:
       void output();
       int getday();
       int getmonth();
    private:
       void check_date();  //私有成员函数
       int day;            //私有成员变量
       int month;          //私有成员变量
   };
   关于类的编程可以给出以下的几点提示:
   first.将所有的成员变量设为私有;
   second.对于每一个类编写取值函数get和赋值函数set;
   %3.将操作符用于对象:
      DayOfYear due_date,tomorrow;
      建立在这个定义的基础上,以下的语句是合法的:
   due_date=tomorrow;  //这其中的私有变量也会被赋值。
   %4.用于初始化的构造函数
      声明对象时,经常需要初始化它的部分或全部变量。为此,定义一个类时,可定义一种特殊的函数,被成为构造函数。构造函数是一个成员函数,会在声明一个函数
      时被自动调用。构造函数用于初始化变量的值,并进行任何可能需要的初始化操作。使用构造函数的时候需要注意以下几点:
      first:构造函数必须与类同名。
      second:构造函数的定义不能返回一个值。此外,在函数声明的起始处或者函数头中,不许指定返回类型(就连void都不可以)。
      third:构造函数要放在public小节。
      初始化构造函数可以有以下的声明方式:
      BankAccount::BankAccount():balance(0),interest_rate(0.0)
      {
           //主体有意留空;
      }
      对于这样的定义:初始化的方式应为 BankAccount account; 这样才是正确的。
      或者:
      BankAccount::BankAccount(int dollar,int cents,double rate):balance(dollars+0.01*cent),interest_rate(rate)
      {
         if((dollar<0)||(cents<0)||(rate<0))
         {
              exit(0);
         }
      }
   c.抽象数据类型
   %1.用于生成抽象数据类型的类
      数据类型由值的一个集合以及那些值定义的一系列基本运算构成。如果使用一个数据类型的程序员不能访问值和运算的细节,这个数据类型就称为抽象数据类
      型(ADT);
      程序员的定义的类型不会自动的成为ADT,而程序中最好能够实现程序员所有定义的数据类型都为ADT。为了使一个类变成ADT,必须采取特定的方式来定义类。
      为了将类定义成抽象数据类型,你需要严格区分程序员使用类型的方式与该类的实现细节。
      为了达到的这个目的,需要遵守一下的原则:
      first:将所有的成员变量设为私有变量。
      second:将用户程序员需要的每个基本操作设为公共成员函数,并完善地指定如何使用每个公共成员函数。
      third:将任何辅助函数都设为私有成员函数。
   d.继承
      流类之间的继承关系:
      C++最强大的特性之一就是派生类的使用。
      我们说类A是类B的派生类时,是指类A具有类B的全部特性,但它还可能新添了一些特性。ifstream是istream的派生类。
      void say_hello(ostream& any_out_stream)
      {
          any_out_stream << "hello";
      }
      调用的时候可以采用以下的方式:
      ofstream fout;
      fout.open("afiled.at");
      say_hello(cout);   //这样使用是因为ofstream是ostream的派生类。
      say_hello(fout);

时间: 2024-08-29 15:00:58

c++速成,适合有c基础的朋友(3)的相关文章

c++速成,适合有c基础的朋友(2)

5.I/O流————对象和类入门  a.流和基本文件     流 是一个由字符构成的流(flow).如果流向程序,被称为输入流.如果流出程序,则称为输出流.输入流可能由键盘或文件提供,输出流可以流向屏幕或文件.     cin和cout就是输入输出流的例子.     如果定义了一个输入流:in_stream 这个流来源与某个文件,则:     int the_number;     in_stream >> the_number;     类似的,如果定义了out_stream输出到某个文件中

c++速成,适合有c基础的朋友(1)

1.C++程序的整体布局:#include<iostream>      //"<iostream>"中不能有多余的空格using nameplace std     //此处c++特有,c没有.另一种写法是将上述两行写为 #include <iostream.h>,对应较老的版本.如果编译器要求这样的写法可以考虑int main()              //(接上一行)升级编译器.{  <语句块>;   return 0;}c++

scapy编写简单的ARP扫描脚本 本课程基于 Python 的 scapy 模块编写,适合有 Python 基础的同学学习,最终完成一个简单的 ARP 扫描脚本。

scapy编写简单的ARP扫描脚本 本课程基于 Python 的 scapy 模块编写,适合有 Python 基础的同学学习,最终完成一个简单的 ARP 扫描脚本.

数据分析师适合没有任何基础的女生学习吗

数据分析师适合女生吗?这个问题无论从哪个方面回答,可以说数据分析师是适合女生的,毕竟现在很多工作基本上都没有太大差别,而且,女生比较细心,所以女生做数据分析师还是相当不错的当然,女生想从事数据分析师先来看看数据分析师必备的四大能力. 1.全局观 某日,产品经理跑过来问我:Hi, 能不能帮我看一下昨天产品新功能发送的数据?谢谢!条件反射我会说:好,我马上给你!不过我还是礼貌性地问了一句:为什么需要这数据呢?产品经理回复道:哦,昨天新功能上线了,我想看看效果.知道了产品经理的目的,我就可以针对性地进

冒泡排序优化以及插入排序(本文凝视较少适合有一定基础的观看)

#include<stdio.h> #define cnt 6 //定义排序个数 //冒泡排序优化 void Bubble_Sort(int A[],int N) { for(int P = N - 1; P >= 0;P--) { int flag = 0; //定义一个flag推断之后的序列是否有序 for(int i = 0;i < P;i++) //一趟冒泡 { if(A[i] > A[i+1]) //一次一次的冒泡 { int temp = A[i+1]; A[i+

冒泡排序优化以及插入排序(本文注释较少适合有一定基础的观看)

#include<stdio.h> #define cnt 6 //定义排序个数 //冒泡排序优化 void Bubble_Sort(int A[],int N) { for(int P = N - 1; P >= 0;P--) { int flag = 0; //定义一个flag判断之后的序列是否有序 for(int i = 0;i < P;i++) //一趟冒泡 { if(A[i] > A[i+1]) //一次一次的冒泡 { int temp = A[i+1]; A[i+

设计模式推荐丛书

我将按照初级,中级,高级三类来划分推荐的书.并且按照格式——名称,语言,内容&评论,推荐指数来写:). 初级:我认为初级的标准是阐述模式是什么以及常见模式的介绍.1.名称 : Head First Design Patterns语言 : java评论 : Jolt大奖得主,介绍了常见的十几种模式.我认为最好的模式入门书籍,内容生动,风格活泼.如果对模式了解较少,看这本书最合适不过,即使你水平不错,相信看了也会有收获.推荐 : 五星 2.名称 :java与模式语言 :java评论 : 首先介绍了S

Hadoop单机模式安装-(1)安装设置虚拟环境

网络上关于如何单机模式安装Hadoop的文章很多,按照其步骤走下来多数都失败,按照其操作弯路走过了不少但终究还是把问题都解决了,所以顺便自己详细记录下完整的安装过程. 此篇主要介绍如何在Windows环境下设置虚拟机环境以及一些准备工作,熟悉WMware的朋友可以略过. 我所记录的笔记适合没有Linux基础的朋友跟我一起操作,同时欢迎高手参观指导. 环境约定 以下环境基于攥写时间:5th July 2015. 宿主机器:Windows 8 虚拟机环境:WMware Wrokstation 11

Hadoop单机模式安装-(2)安装Ubuntu虚拟机

网络上关于如何单机模式安装Hadoop的文章很多,按照其步骤走下来多数都失败,按照其操作弯路走过了不少但终究还是把问题都解决了,所以顺便自己详细记录下完整的安装过程. 此篇主要介绍在虚拟机设置完毕后,如何进行Ubuntu的安装. 我所记录的笔记适合没有Linux基础的朋友跟我一起操作,同时欢迎高手参观指导. 环境约定 以下环境基于攥写时间:5th July 2015. 宿主机器:Windows 8 虚拟机环境:WMware Wrokstation 11 Ubuntu版本:Ubuntu Deskt