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++中的运算符,可执行构造函数、析构函数,返回指针;

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

原文地址:https://www.cnblogs.com/qingcheng/p/3416025.html