C++语法总结

2023-11-15

1 const 与volatile 的用法
  1 const
   #include<conio.h>
   #include<iostream.h>
   //行参数指向const 类型变量的指针
   void display_c(cons int * pi)
   {
     cout<<"display_c:"<<*pi<<endl;
   }
   //行参为普通类型变量的指针
   void display(int *pi)
   {
     cout<<"display_c:"<<*pi<<endl;
   }
   //const 类型变量
   const int i1=1;
   //error  i1=3;
   //const 类型变量的指针
   int i2=2;
   const int * pi2=&i2;
   //error *pi2=3
   // const 指针
   int * const pi3=&i3;
   *pi3=5;
   // error *pi3=&i4  可以赋予不同的值,但是不可一指向不同的变量
   //指向const 内容的const 指针
   const int * cosnt pi5=&i5;
2 sizeof 返回某个便赖宁嘎或数据类型的长度
3 引用
 1 引用变量
  int i=1;
  int & r_i=i;
5 名空间
  1 namespace
   namespace car
  {
    int model;
    int length;
    int width;
  }
  namespace plane
  {
    int model;
    namespace size
    {
      int lenth;
      int width;
    }
  }
  namespace car //添加名空间的成员
  {
    char * name;
  }
  namespqce c=car; //定义别名
  int Time //外不变量属于全局名空间
 
  car::length=3;
  plane::size::length=70;
 
  int Time=1996;
  ::Time=1997;

 2 using
  void main()
 {
   using namespace car;
   length;
   using namespace phane;
   model;

 }
6 new 与delete 运算符
 double * pd;   // define pointer variable
 pd=new double; // allocate memory
 if(pd!=null)
 {
   ...
  delete pd;  // free memory
 }

 double1=null
 * pds=new double[100];
 if(pds)
 {
   ....
  delete[] pds;

 }

 如果是使用new 进行内存空间分配没有成功,则返回空指针null
 释放一个数组分配的内存是,常常采用带[]的形式
7 void 指针 它指向一个地址值,但是不说名数据类型,可以使用void 指针创建一个通用的函数,在使用
 的时候将指针类型转化成相应的具体类型。
 void ShowHex(void *pv,int siae)
{
 ....
 ((unsigned char *)pv)[i]
}
void main()
{
  void *pv=null;
  unsigned char c1=0x12;
  pv=&c1;
  ShowHex(pv,sizeof(c1));
 }
9 typeid 运算符 用来求得变量或队形爱女嘎的数据类型,返回一个type_info 类型的对象,通过该对象
  可以获取数据类型的名称

  include<typeinfo.h>
  int i;
  const type_info &t0=typeid(i);
  t0.name();
10 函数
   1 模板函数
  template<class T> T min(R &x,Tv&y)
 {
   return x<y?x:y;
 }
  2 指向函数的指针
   int max(int x,int y)
  {
    ...
  }
  int min(int x,int y)
  {
     ...
  }
  int (* m_pfunction)(int,int);
  void main()
  {
    m_pfunction=max;
    (*m_pfunction)(2,3);
     m_pfunction=min;
    (*m_pfunction)(2,3);
  }
11 类与对象
 1 构在函数和析构函数
 #include <iostream.h>
#include <string.h>
#include <conio.h>
class Book
{
private:
  char * pBookName;
public:
  int PageNum;
public:
  Book(char * pBN=NULL);
  ~ B o o k ( v o i d ) ;
  void SetBookName(char * pBN);
  int GetBookName(char * pBN,unsigned int MaxSize);
} ;

Book:Book(char *PBN)
{
  cout<<"构造函数"<<endl;
  pBookName=null;
  if(oBN!=null)
  {
     pBookName=new char[strlen(pBN)+1];
     if(pBookName!=null)
         strcyp(pBookName,pBN);
  }
}

Book::~Book()
{
  delete[] pBookName;
}

void Book::SetBookName(char * pBN)
{
  if(pBookName!=null)
    delete[] pBookName;
   pBookName=new char[strlen(pBN)+1];
     if(pBookName!=null)
         strcyp(pBookName,pBN);
}

int Book::GetBookName(char * pBN,unsigned intmaxSize)
{
 if((pBookName!=null))&&(MaxSize>strlen(pBookName))
{
  strcpy(pBN,pBookName);
  retrun strlen(strlen(pBookName));
 }
}

// 使用
Book b1;
b1.SetBookName("test");
Book b2(test1);
 2 对象的引用参数传递
  void Add(Book b)
  void AddRef(Book & b);
 3 静态成员变量 是一个公共变量
 在初始化 的时候利用作用运算符:: 对私有类型的静态成员变量可以向公有类型的静态成变量一样赋值
 但不能直接引用
 3 const 类型成员函数与mutable
 class CDate
 {
   public:
    int year;
    mutable int month;
    CDate(int y=2000,int m=1)
    {
       year=y;
       month=m;
    };
    int BetMonth() const ;//read only
    void SetMonth(int m);// write only
 }
  void CDate::SetMonth(int m)
 {
   month=m;
 }
 void main()
 {
   CDate d1;
  
 }

 在const 类型的成员函数定义中,不可一直接或简介的修改普通类型的成员变量
 如果象修改const 类型对象的成员函数,可以使用关键字mutable 对该成员变量进行修改
 5 对象的初始化与初始化行
 将参数类表中的数值赋予成员变量时,不仅可以在构造函数的函数体中进行,以阿宽衣在初始化行中进行
 在初始化处惊醒初始化的情况有:
  1 分层类的构在函数可以调用它的任何一个子对象的构造函数
  2 对常量const 类型的成员变量的初始化必须在初始化行上
  3 对于引用类型的成员变量的初始化必须在初始化行上
 
 class CPoint
 {
   public:
    int x,y;
    CPoint(int ax=0,int ay=0)
    {
      x=ax;
      y=ay;
    }
 };

 class CRect
 {
   private:
    CPoint low_right;
    CPoint up_left;
   public:
    int & CenterX;
    const int CenterY;
    CRect(int x1,int y1,int x2,int y2,int &x3,int y3)
     :up_left(x1,y1),low_right(x2,y2),CenterX(x3),CenterY(y3)
   {
    
   }
 };
void main()
{
  int cx=5;
  int cy=6;
  CRect r1(1,2,3,4,cx,cy);
}
 6 拷贝构造函数
  拷贝构造函数与普通构造函数的差别在与棋参数类表,参数列表中有一个对象,该对象的数据类型是
 本类的一个引用,而且一般情况下,该对象还应该是一个const 类型的对象。
  如果在类的定义是不是显示的定义一个拷贝函数,则编译器会自动的定义一个拷贝构造函数
 
 class CPoint
 {
   public:
     int x,y;
     CPoint(int m_x=0,ubt m_y=0);   // default constructor 
     cPoint(const CPoint &c);      //copy consrucotr
 };
 CPoint::CPoint(int m_x,int m_y)
 {
  
 }
 
 CPoint::CPoint(const CPoint &c)
 {
   x=c.y;
   y=c.x;
 }

 void main()
 {
   CPoint c1(1,2);  //invoke default constructor
   CPoint c2-c1;    // invoke copy constructor
 }
7 template class
 template<class t,int Size>class Array // template class
 {
   private:
     T arr[Size];
     int CurSize;
   public:
    Array(T * date,int n)
    {
      CurSize=n<Size?n;Size;
      for(int i=0;i<CurSize;i++)
      {
        Arr[i]=data[i]; 
      }
    }
}

void main()
{
  int i1[10]={1,2,3,4,5,6,7,8,9};
  Array<int,6>array_i1(i1,i0);
}

1 友员类和友员函数
  #include <iostream.h>
  #include<string.h>
  #include<conio.h>

class SoftWareEngineer; //先对SoftwareEngineer 类进行显示说明一下

class Computer // 定义Computer 类
{
   private:
     int Price;
   public:
     Computer(int p){Price=p};
    friend class SoftwareEngineer; //将友员类载这里声明
    frined void Judge(Computer &c,SoftwareEngineer  & s) //友员函数
   
};

class SoftwareEngineer
{
   int Salary;
   char Name[20];
  public:
    SoftwareEngineer(int s,char *n //构造函数)
  {
     Salary=s;
     strcpy(Name,n);
  }
int GetComputerPrice(Computer &c){return c.Price} //访问Computer 的思友变量
friend void Judge(Computer &c,SoftwareEngineer & s) //友员函数
};
//判断一个软件工程师是否可以用一个月的薪水买的器一台电脑
void Judge(Computer &c,SoftwareEngineer &s) //桥友员函数
{
   if(c.Price>s.Salary)
     cout<<"软件工程师"<<s.Name<<"的一个月薪水买不起一台电脑"<<endl;
   else
     cout<<"软件工程师"<<s.Name<<"的一月薪水买的起一台电脑"<<endl;
}
void main()
{
  Computer c1(100);
SoftwareEngineer s1(120,"user1");
Judge(c1,s1);

SiftwareEngineer s2(80,"user2")
Judge(c1,s2);
getch();
}
2运算符重载
#include<iostream.h>
#include<conio.h>
#include<iomanip.h>

class TValue{
 private:
     int value;
 public:
   TValue(int i){value=i}
 //成员函数重载运算符
  TValue operator!();
  TValue operator+(TValue & rv);
 // 友员函数重载运算符
  friend ostream & operator<<{ostream & os,TValue & rv};
}

TValue Tvalue::operator!()
{
  return TValue(!value);
}

TValue TValue:operator+(TValue& rv)
{
  return TValue(value+rv.value);
}

ostream & operator<<(ostream & os,TValue rv)
{
   os<<setw(5)<<rv.value;
  return os;
}

void main()
{
   TValue v1(3),v2(5);
   cout<<
}
3 类的派生和继承
1class Box{
   public:
     int width,height;
     void SetWidth(int w){width=w};
     void SetWidth(int h){height=h;};
 };
 class TColorBox::public Box{
  public:
     int color;
     void SetColor(int c){color=c;};
 };

void main(){
    TColorBox cb;
    cb.SetColor(255); //声明非继承类的对象
    cb.SetWidth(100);//声明继承类的对象
    cb.SetHeight(100); //声明继承类的对象
  
  }
 2 不能被继承的成员
  构造函数,析构函数,用户定义的新操作符,用户定义的赋值操作,友员关系
 3 构造函数,析构函数的调用顺序
class A{
 int a,b,c;
 public:
  A(int x,int y,int z)
{
   a=x;
   b=y;
  c=z;
}

};
class B{
  int d;
  public :
   B(int xx):A(xx,xx+1,xx+2)(d=xx);//内联构造函数
   B(int x,int y,int z,int xx);//非内联构造函数
  B:B(int x,int y,int z,int xx):A(x,y,z)
{
   d=xx;
}
}
 
实例
class Currency
{
  poublic:
    double par_value;
    Currency(){per_value=0.0;}
    Currency(double d){per_value=d;}
    Currency(Currency &rc){par_value=rc.par_value;}
  
   Currency & operator={Currency & c}
   {
      par_valuc=c.par_value;
      return * this;
   }
   Currency & operator+(Currency & c)
  {
     par_value+=c.par_value;
    return *this;
  }
}

//人民币
 class RMB:public Currency
 {
   public:
   RMB():Currency(){};//调用派生类的构造函数前,需要调用器基类的工造函数
   RMB(double d):Currency(d){};
   RMB(Currency& c):Currency(c){};
   RMB(RMB& rmb):Currency(rnb){};
   friend ostream& operator<<{ostream& os,RMB& rnb};//派生类的附加功能
 };
 ostream& operator<<{ostream& os, RMB& rmb} //output 运算符不能是一个类的成员函数
{
  os<<"¥"<<setiosflags(ios::shwopoint|ios:fixed)<<setprecision(2)rmb.par_value;
 return os;
}

void main()
{
   RMB r_income(5000);
   RMB r_balance;
   r_balance=r_income=r_expense;
  cout<<"income"<<r_income<<endl;
}
4 将iostream 运算符重载
 1)ostream & operator<< (ostream &os,const Triangular & ths)
{
   os<<"("<<rhs.beg_pos()<<","<<rhs.length()<<")";
  rhs.display(rhs.length(),rhs.beg_pos(),os);
}
ouutput 运算符不能够设计成member function
 2)istream& operator>>(istream &is,Triangular &rhs)
 {
    char ch1,ch2;
    int bp,len;
   //输入 ch1='(',bp=3,ch3=',' len=6
   is>>ch1>>bp>>ch2>>len;
   rhs.beg_pos(bp);
   rhs.length(len);
   rhs.next_reset();
   return is;
 }
Triangular tris;
cin>>tri2
4 虚基类
载继承关系中,同一基类被继承多次,不仅会引器歧异,而起可能浪费空间
 class A
{
   public:
     int value;
};
class B:public virtual A(); //虚基类 编译器只产生一个基类版本。如果不定义为virtual 编译器不知到调用那个value 了,当然
class C:public virtual A();//  也可以return B::value;
class D:public b.public c
{
  public
   int GetValue(){return value;}
};

void main()
{
  D dd;
  dd.GetValue();
}

5 多态形,和虚函数
class TFirst
{
   public virtual void Display();
};

void TFirst::Display()
{
   cout<<"first "
}

class TSecond:public TFirst
{
   public:
     virtual void Display();
};

void TSecond::Display()
{
   cout<<"second"
}

void Display(TRist * pFirst)
{
   pFisrt=>Display();
}

void main()
{
   TFirst * pFirst=new TFirst;
   TSecond * pSecond=new TSecond;
   pFirst->Display();
   pSecond->Display();
   Display(pFirst);
   Display(pSecond);
    delet pfirst ;
    delet pSecond;
  
    getch();
}

c++ builder 中的集合的
  1 集合的概念基本
   Set<type,minval,maxval>
   Set<char,'A','C'> s1
  
   tydefef Set(char,1,255) UPPERCASet;
   UPPERCASESet s1;
   s1<<'A'<<'B'<<'C';
   sysset.h 直接包含载vcl.h 中
  2 集合的操作
   #include<iostream>
   #include<system.hpp>
   #include<conio.h>
  
   using namespace std;
  typedef Set<char,'B','Z'> UpperSet;
  typedef Set<char,'a','z'> LoverSet;
  typeder Set<char,'a','j'> HalfLowerSet;

  void set_example()
  {
      LowerSet ae,ae2,ac,de;
      UpperSet AE,AE2,AC,DE;
     HalfLowerSet aj;
  }

异常处理
1 c++ 的异常处理
 #include <iostream.h>
 #include <conio.h>

 class Crange
 {
    public:
      int index;
      CRange(int i){index=i;}
}
   class CString
   {
        char a[100];
        int len;
        public:
         CString(char * s)
        {
             Len=strlen(s);
             strcpy(a,s);
        } 
       char & operator[](int i)
      {
           if(i>0 && i<len) return a[i];
           else throw CRange(i);
      }
    
      void DisplayNoCatch(CString & s)
     {
             int j;
             for(j=0lj<20;j++)
               cout<<s[j]<<""endl;;
     }
   
     int DisplayHasCatch(CString & s)
    {
        try{
               DisplayNoCatch(s);
        }catch(CRange r)
        {
                cerr<<r.index<<endl;
        }
         return 99;
    }
 }
 2 多路捕捉
  #include<iostream.h>
  #include<conio.h>
  void MultiException()
  {
      int i;
      double d;
    
      int no;
      cout<<"(>0 and <5)";
      cin>>no;
      tyr
      {
         switch(no)
        {
            case 1;
               throw 123;
               break;
             case 2:
               throw i;
               break;
             case 3:
               throw d;
               break;
             case 4:
               throw "Error";
                break;
              default:
                cout<<"error";
        }
      }
      catch(int ie)
     {
          cout<<"int"<<endl;
     }
     catch(double de)
     {
         cout<<"double"<<endl;
     }
     catch(char* se)
    {
          cout<<"char"<<endl;
    }
  }

 3 bcb中的异常类
   1)却省vcl 异常处理 无try catch 自动处理
     int i=4,j=0;k;
     k=i/k;
     //下一句永远不会执行
    ShowMessage(k);
   2) 引发vcl 异常类
    try{
    }
    catch(Exception &e)
    {
          ShowMessage(e.,Message);
    }
   不能引发如int double 等简单类型的异常
   3) c++ 异常处理
    try
    {
         throw 2222;
    }
    catch(int ErrorCode)
   {
         ShowMessage(ErrorCode);
    }
 }
 4 单一捕捉异常
   try{
      k=10/0;
   }catch(EDivByZero & E)
   {
      MessageDlg() 
   }
  5 捕捉所有异常
   try
   {
   }catch(...) or(EExternalException &E)

 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++语法总结 的相关文章

随机推荐

  • React的函数编程

    函数式编程的好处是什么 函数式编程是一种编程模式 在这种编程模式种最常用函数和表达式 函数式编程把函数作为一等公民 强调从函数的角度考虑问题 函数式编程倾向用一系列嵌套的函数来解决问题 函数式编程让我们的代码更清晰 每个功能都是一个函数 函
  • 「分享」最全AI合集 全是好玩意!

    哈喽 大家好 木易巷这次给大家带来了最全的AI合集 每一个都功能强大 总有一个是你需要的 话不多说 直接上 1 学英语 Replika 2 Al生成乐曲 AmperMusic IBM Watson Music 3 Al换脸 Deepfake
  • 一款好用的基于vue的录屏插件recordrtc,拿走不谢

    第一步 下载安装包 npm i recordrtc 第二步 复制代码 即可使用
  • c语言--unsigned修饰符

    在C语言中 unsigned是一种无符号整数修饰符 它可以与多个整数类型 如int short long等 结合使用 表示该整数类型只包含非负数值 unsigned修饰的整数类型不保存正负号位 因此可以用来表示更大的正整数范围 例如 uns
  • 静态代码扫描(四)——Java资源关闭研究

    最近一直在研究java资源关闭的检查规则 发现市面上开源的工具针对资源关闭的检测都存在一定不足 同时也无法满足我们业务的需求 所以火线团队针对资源关闭进行了深度的研究 取得了一些不错的进展 但是过程的艰辛也远超了我们的预料 现在就跟大家聊聊
  • 爬虫中连接数据库,两种获取网页内容的方式,BeautifulSoup, 正则表达式的使用,爬json格式文件

    一 连接数据库 1 连接MySQL import pymysql conn pymysql connect host localhost port 3306 user root passwd db charset utf8 cur conn
  • Multi-Camera Support

    Android 9 introduces API support for multi camera devices via a new logical camera device composed of two or more physic
  • 豪斯多夫距离-- Hausdorff distance of convex polygons

    蒙特利尔的麦吉尔大学的计算几何课程资料 原文链接 http cgm cs mcgill ca godfried teaching cg projects 98 normand main html 1 Introduction When ta
  • 总结 图(有向图、无向图、权、度、存储结构、邻接矩阵、领接表 概念)

    20171124 图的概念 图的基本性质 无向图 有向图 连通图 图的权 有些图的边或者狐剧有与他相关的数字 这种与图的边或者狐相关的数叫做权 图的度 无向图顶点的边数叫度 有向图顶点的边数叫出度和入度 图的数据存储结构 邻接矩阵 带权邻接
  • qt 获取当前程序运行路径_linux设置软件运行时动态库查找路径

    用习惯了windows 在linux下写代码 涉及到动态库 总是要复制到 usr lib里 觉得不方便 特别是调试的时候 不想复制过 特地找了一下怎么设置动态库查找路径 这里记录一下 程序是通过环境变量LD LIBRARY PATH的路径来
  • Exception in thread “main“ ExitCodeException exitCode=-1073741515

    Exception in thread main ExitCodeException exitCode 1073741515 今天在本地使用Mapreduce执行单词计数时出现了问题 在网上进行方法查找方法 首先 我先尝试将hadoop安装
  • linux信号介绍

    信号介绍 信号的概念 信号是信息的载体 Linux UNIX 环境下 古老 经典的通信方式 现下依然是主要的通信手段 信号在我们的生活中随处可见 例如 古代战争中摔杯为号 现代战争中的信号弹 体育比赛中使用的信号枪 信号的特点 简单 不能携
  • 【扩展KMP】POJ_3450| HDU_2328 Corporate Identity

    原题直通车 POJ 3450 Corporate Identity HDU 2328 Corporate Identity 题意概述 找出N个串中最长公共子串 分析 一 可以直接枚举其中一个串的所有字串 跟所有串进行匹配找到结果 二 用其中
  • IDEA(Ultimate版本)安装全程照着箭头指示

    只需动手跟着箭头指示安装即可 安装包的链接 https pan baidu com s 12hSGc7PDpbcaV UxCL5NSQ 提取码 zx1x 下载后解压自己想要的位置 安装完后可删除 以上就是安装全过程 如有问题可在评论区留言
  • 2023-05-19 题目

    1 java的三大特性 亦或者四大特性 继承 继承是从已有类得到继承信息创建新类的过程 提供继承信息的类被称为父类 超类 基类 得到继 承信息的类被称为子类 派生类 继承让变化中的软件系统有了一定的延续性 同时继承也是封装程序中可变因素的
  • <<计算机视觉CVPR>>2022:Grounded Language-Image Pre-training

    收录情况 CVPR 2022 论文链接 https arxiv org abs 2112 03857 代码链接 https github com microsoft GLIP 文章目录 简介 问题 方案 主要贡献 相关工作 方法 Groun
  • 12款开源或免费的3D建模软件

    1 Blender Blende是一款系统全面的3D建模套件 它提供了大量专业级功能和模块 跨平台支持所有的主要操作系统 目前并已成为免费3D软件的代名词 Blender通常被称为TheBlenderProject 因为它不仅仅是一个软件
  • Python 基础合集13:错误的调试和处理

    一 前言 本小节介绍了错误的调试和处理 包含了寻找出现bug的代码的方法 以及处理bug的方法 另外还附加了一些错误类型 环境说明 Python 3 6 windows11 64位 二 调试 找出错误 之前看到一句话 很在理 出错并不可怕
  • 汇编, 立即数, 有符号与无符号数

    汇编 立即数 有符号与无符号数 386 model flat stdcall option casemap none includelib msvcrt lib printf proto c ptr sbyte vararg data sz
  • C++语法总结

    1 const 与volatile 的用法 1 const include