• C++ 细节知识


    1.typedef struct child

    {
    string name;
    struct child* next;
    };

    child* head;
    head = (child*)malloc(sizeof(child)); 
    cin>>head->name;
    0x00c42386处有未经处理的异常:oxc0000005:写入位置oxcdcdcd时发生访问冲突。0xC0000005 表示使用了未创建(未分配内存空间)的变量或对象。0xC0000005错误通常是由于内存访问错误引起,可能是你的程序有错误的指针操作或者访问了空对象,内存未初始化。child* head;未初始化变量啊string name;这个是一个class,你分配内存之后没有对head做初始化,只有在指针,既分配了空间,又初始化以后,才可以用。
    #include <iostream>
    using namespace std;
    class sss{
      public:
      sss(){
        cout<<'s';
      }
    };

    int main(){
      sss s1;
      return 0;
    }
    譬如这段代码,sss s1;这句话就是定义变量,在栈空间为s1分配内存并初始化class是可以定义方法的……需要初始化的……struct相当于就是一块内存。string是一个class,是需要进行初始化的然后你把它放在struct里面,malloc只是为他分配了内存,但是没有初始化所以string里面的东西全是乱的,可能出各种奇怪的问题就是说,class里面放class或者struct里面放struct,class里面放struct也有但不多。这个错误犯了好几遍了。
    可以这样用:
    typedef struct child
    {
                     char name[20];
                     struct child* next;
    };
    child* head;
                    child* tail;
                    head = (child*)malloc( sizeof(child));
     
    cin>> head->name;
     
    2.c++中关于字符串的读入——cin、getline、get、gtes(查询+思考+总结)
    1、cin读入一个字符:
    char c;cin>>c;
    2、cin读入一个字符串:
    char s[10];cin >> s;(c风格字符串)    
    string str;cin >> str;(c++的string)
    3、cin.get()读入一个字符:
    char c;c=cin.get();
    4、cin.get()读入一个字符串
    char s[10];cin.get(s,10);
    5、cin.getline()读入字符串(c风格和string都行,只要要是char *)
    cin.getline(s,5)//默认回车
    空格不行
    //cin流
    6、getline(cin,str)
    str为string,可以读空格!
     
     
    3.文件
    ifstream fin;
    fin.open( "data.txt");
    if(fin.bad())
    {
       cout<< "文?件t读??取??失???败???" <<endl;
       return 0;
    }
    string input_str;
    fin>>input_str;
    fin.close();
     
    //输出到文件
     ofstream ocout;
     ocout.open( "output.txt" );
     ocout<<"字??符??串??个?数?y:?o"<<str.size()<<endl;
     ocout.close();
     
    4.//递归函数
    int fuc_naive_recur(int i)
    {
        if(i==0) return 0;
        if(i==1) return 1;
        return fuc_naive_recur(i-1)+fuc_naive_recur(i-2);
    }
     
    5.//判断输入非法
    • 例如判断输入的int值是否超出范围,或输入字符串等非法输入。
    • int n;cin>>n;if(cin.fail())
    • cout<<“输入非法!”<<endl;//例如此时输入了字符‘a’或输入的值超出了intmax。则会认为输入非法

    6.读入一个文件

    ifstream fin;
             fin.open (filePath. c_str());
     
        if(fin .bad())
        {
                    cout<< "read file failed" <<endl;
                    return 0;
        }
        string input_xml = 0;
             string str = 0;
             while(!fin .eof())
            {
     
                    getline(fin ,str);
                    input_xml += str ;
            }
      
        fin.close ();
     
        //cout<<input_xml<<endl;
     
    7.随机数,申请数组空间
    随?机??生???成??5*10^6到??5*10^7个?数?y,??取??5个?测a试??集??
    int main(int argc,char** argv)
    {
                     long long N = 50000000 ;
                     long long i = 0;
                     int *myarray;
                    myarray = ( int*)malloc(sizeof (int)*5*N);
                    
                     if(myarray == NULL)
                    {
                                    cout<< "数?y组???空?间?申???请?失???败???!??" ;
                                     return 0;
                    }
                    srand(time(NULL));
        for(i = 0 ;i<N;i++)
                    {
                                    
                                    myarray[i] = rand();
                                    cout<<myarray[i]<<endl;
                                     //Sleep(1000);
                    }
    }
     
    8.建立基于对话框的程序,在Dlg.cpp的OnPaint()函数中
    else
                    {
                                    CPaintDC dc( this); 
                                    CString straa = CString( "asdfasd");
                                    dc.TextOut(100,200,straa);
                                    dc.SetPixel(100,200,RGB(255,0,255));
                                    dc.Ellipse(100, 100, 30, 30); //圆2心?坐??标???,??半??径?
                                    CDialogEx::OnPaint();
                    }
     
     
    9.C++类继承例子
    //drawable.h文件里
    class drawable{
    public:
                     virtual void draw(){}
                    drawable( int len, char c):_l(len), _c(c){}
     
    protected:
                     int _l;
                     char _c;
    };
     
    class circle:public drawable{
    public:
                     void draw();
                    circle( int len, char c):drawable(len, c){}
    };
     
    class square:public drawable{
    public:
                     void draw();
                    square( int len, char c):drawable(len, c){}
    };
     
    //drawable.cpp文件里
    #include "drawable.h"
    #include "iostream"
    using namespace std;
     
    void triangle::draw()
    {
                     for(int i =1;i<= _l;i++)
                    {
                                     for(int j=0;j<(_l+1) - i;j++)
                                    {
                                                    cout<< " ";
                                    }
                                     for(int j=1;j<=i;j++)
                                                    cout<<_c<< " ";
                                    cout<<endl;
                    }
    }
     
    void square::draw()
    {
                     for(int i = 0;i<_l;i++)
                    {
                                     for(int j=0;j<_l;j++)
                                    {
                                                    cout<<_c<< " ";
                                    }
                                    cout<<endl;
                    }
    }
     
     
    //main函数调用
    #include <iostream>
    #include <string>
    #include "drawable.h"
     
    using namespace std;
    int main()
    {
                     int shap;
                    cout<< "请?选?择?形?状???:?o1.正y方??形? 2.三?y角?形? 3.圆2形?" ;
                    cin>>shap;
                     int len;
                    cout<< "请?输??入??边??长??或??者?半??径?参?数?y:?o" ;
                    cin>>len;
                     char ch;
                    cout<< "请?输??入??填??充?字??符??:" ;
                    cin>>ch;
                    drawable *_draw;
                     switch(shap)
                    {
                     case 1:
                                    _draw = new square(len, ch);
                                     break;
                     case 2:
                                    _draw = new triangle(len, ch);
                                     break;
                     case 3:
                                    _draw = new circle(len, ch);
                                     break;
                    }
                    _draw->draw();
                     return 0;
    }
     
     
    10.C++构造函数和运算符重载
    typedef struct Matrix
    {
        long long a;
        long long b;
        long long c;
        long long d;

       Matrix(void):a(1),b(1),c(1),d(0){};

       Matrix(const   long long& aa,const   long long& bb,const   long long& cc,const   long long &dd):
       a(aa),b(bb),c(cc),d(dd){};

       Matrix(const Matrix& tmp):a(tmp.a),b(tmp.b),c(tmp.c),d(tmp.d){};

       Matrix operator *( Matrix& tmp)
       {
             long long p,q,r,t;
           p = a*tmp.a+b*tmp.c;
           q = a*tmp.b+b*tmp.d;
           r = c*tmp.a+d*tmp.c;
           t = c*tmp.b+d*tmp.d;
           return Matrix(p,q,r,t);
       };
    }Matrix;
     
    11.C++时间函数
    #include <time.h>
        
    clock_t start,end;
        start = clock();
        fuc_pre_calc();
        end = clock();
     cout<<"   使用时间:" <<(float)(end - start);
     
    12.string字符串操作
    字符串操作,如字符串分割、splitfindinsert....可以认为必考

    string str = “abcde

    const char* ch = str.c_str();

    13.C++中class的属性和方法,默认是private的,所以默认情况下构造函数也是private,所以是无法实例化的。

         struct默认是public。

    14.对于函数比如virtual void setPixel(int ,int ,int){}必须加上{},不然出现external link错误,还没发现原因,待查……

    15.malloc和new的区别

    malloc和free是C语言中的函数。在C语言中只能使用malloc和free;

    new和delete是C++中的运算符,可执行构造函数、析构函数,返回指针;

    共同点:都可以在堆上动态分配和释放内存。

  • 相关阅读:
    二维码生成器
    uniapp 上下左右手势滑动时的事件
    uniapp 类似钉钉的消息时间段显示
    css 币种与价格的底部对齐
    css 设置父元素透明度不影响子元素透明度
    js match方法截取某个字符串前面的内容
    下载电脑系统,服务等...
    uniapp 实现点击、滑动切换tab导航内容
    vue 实现分类渲染数据
    jquery 实现在事件完成后才能再次点击执行
  • 原文地址:https://www.cnblogs.com/qingcheng/p/3416025.html
Copyright © 2020-2023  润新知