您的位置:首页 > 编程语言 > C语言/C++

C++ 细节知识

2013-11-09 20:27 309 查看
[align=left]1.typedef struct child[/align]
{
string name;
struct child* next;
};

child* head;
head = (child*)malloc(sizeof(child));

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

using namespace std;

class sss{

public:

sss(){

cout<<'s';

}

};

int main(){

sss s1;

return 0;

}
[align=left]譬如这段代码,sss s1;这句话就是定义变量,在栈空间为s1分配内存并初始化class是可以定义方法的……需要初始化的……struct相当于就是一块内存。string是一个class,是需要进行初始化的然后你把它放在struct里面,malloc只是为他分配了内存,但是没有初始化所以string里面的东西全是乱的,可能出各种奇怪的问题就是说,class里面放class或者struct里面放struct,class里面放struct也有但不多。这个错误犯了好几遍了。[/align]
[align=left]可以这样用:[/align]

[align=left]typedef struct child[/align]
[align=left]{[/align]
[align=left] char name[20];[/align]
[align=left] struct child* next;[/align]
[align=left]};[/align]

[align=left]child* head;[/align]
[align=left] child* tail;[/align]
[align=left] head = (child*)malloc( sizeof(child));[/align]
[align=left] [/align]

[align=left]cin>> head->name;[/align]
[align=left] [/align]
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.文件

[align=left]ifstream fin;[/align]
[align=left]fin.open( "data.txt");[/align]
[align=left]if(fin.bad())[/align]
[align=left]{[/align]
[align=left] cout<< "文?件t读??取??失???败???" <<endl;[/align]
[align=left] return 0;[/align]
[align=left]}[/align]
[align=left]string input_str;[/align]
[align=left]fin>>input_str;[/align]
[align=left]fin.close();[/align]
[align=left] [/align]

[align=left]//输出到文件
ofstream ocout;[/align]
[align=left] ocout.open( "output.txt" );[/align]

[align=left] ocout<<"字??符??串??个?数?y:?o"<<str.size()<<endl;[/align]
[align=left] ocout.close();[/align]
[align=left] [/align]
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.读入一个文件

[align=left]ifstream fin;[/align]
[align=left] fin.open (filePath. c_str());[/align]
[align=left] [/align]
[align=left] if(fin .bad())[/align]
[align=left] {[/align]
[align=left] cout<< "read file failed" <<endl;[/align]
[align=left] return 0;[/align]
[align=left] }[/align]
[align=left] string input_xml = 0;[/align]
[align=left] string str = 0;[/align]
[align=left] while(!fin .eof())[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] getline(fin ,str);[/align]
[align=left] input_xml += str ;[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] fin.close ();[/align]
[align=left] [/align]
[align=left] //cout<<input_xml<<endl;[/align]
[align=left] [/align]
7.随机数,申请数组空间

[align=left]随?机??生???成??5*10^6到??5*10^7个?数?y,??取??5个?测a试??集??[/align]

[align=left]int main(int argc,char** argv)[/align]
[align=left]{[/align]
[align=left] long long N = 50000000 ;[/align]
[align=left] long long i = 0;[/align]
[align=left] int *myarray;[/align]
[align=left] myarray = ( int*)malloc(sizeof (int)*5*N);[/align]
[align=left] [/align]
[align=left] if(myarray == NULL)[/align]
[align=left] {[/align]
[align=left] cout<< "数?y组???空?间?申???请?失???败???!??" ;[/align]
[align=left] return 0;[/align]
[align=left] }[/align]
[align=left] srand(time(NULL));[/align]
[align=left] for(i = 0 ;i<N;i++)[/align]
[align=left] {[/align]
[align=left] [/align]
[align=left] myarray[i] = rand();[/align]
[align=left] cout<<myarray[i]<<endl;[/align]
[align=left] //Sleep(1000);[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
8.建立基于对话框的程序,在Dlg.cpp的OnPaint()函数中

[align=left]else[/align]
[align=left] {[/align]
[align=left] CPaintDC dc( this); [/align]
[align=left] CString straa = CString( "asdfasd");[/align]
[align=left] dc.TextOut(100,200,straa);[/align]
[align=left] dc.SetPixel(100,200,RGB(255,0,255));[/align]
[align=left] dc.Ellipse(100, 100, 30, 30); //圆2心?坐??标???,??半??径?[/align]
[align=left] CDialogEx::OnPaint();[/align]
[align=left] }[/align]
[align=left] [/align]
[align=left] [/align]
9.C++类继承例子

[align=left]//drawable.h文件里[/align]
[align=left]class drawable{[/align]
[align=left]public:[/align]
[align=left] virtual void draw(){}[/align]
[align=left] drawable( int len, char c):_l(len), _c(c){}[/align]
[align=left] [/align]
[align=left]protected:[/align]
[align=left] int _l;[/align]
[align=left] char _c;[/align]
[align=left]};[/align]
[align=left] [/align]
[align=left]class circle:public drawable{[/align]
[align=left]public:[/align]
[align=left] void draw();[/align]
[align=left] circle( int len, char c):drawable(len, c){}[/align]
[align=left]};[/align]
[align=left] [/align]
[align=left]class square:public drawable{[/align]
[align=left]public:[/align]
[align=left] void draw();[/align]
[align=left] square( int len, char c):drawable(len, c){}[/align]
[align=left]};[/align]
[align=left] [/align]

//drawable.cpp文件里
[align=left]#include "drawable.h"[/align]
[align=left]#include "iostream"[/align]
[align=left]using namespace std;[/align]
[align=left] [/align]
[align=left]void triangle::draw()[/align]
[align=left]{[/align]
[align=left] for(int i =1;i<= _l;i++)[/align]
[align=left] {[/align]
[align=left] for(int j=0;j<(_l+1) - i;j++)[/align]
[align=left] {[/align]
[align=left] cout<< " ";[/align]
[align=left] }[/align]
[align=left] for(int j=1;j<=i;j++)[/align]
[align=left] cout<<_c<< " ";[/align]
[align=left] cout<<endl;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left]void square::draw()[/align]
[align=left]{[/align]
[align=left] for(int i = 0;i<_l;i++)[/align]
[align=left] {[/align]
[align=left] for(int j=0;j<_l;j++)[/align]
[align=left] {[/align]
[align=left] cout<<_c<< " ";[/align]
[align=left] }[/align]
[align=left] cout<<endl;[/align]
[align=left] }[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left] [/align]

//main函数调用
[align=left]#include <iostream>[/align]
[align=left]#include <string>[/align]
[align=left]#include "drawable.h"[/align]
[align=left] [/align]
[align=left]using namespace std;[/align]
[align=left]int main()[/align]
[align=left]{[/align]
[align=left] int shap;[/align]
[align=left] cout<< "请?选?择?形?状???:?o1.正y方??形? 2.三?y角?形? 3.圆2形?" ;[/align]
[align=left] cin>>shap;[/align]
[align=left] int len;[/align]
[align=left] cout<< "请?输??入??边??长??或??者?半??径?参?数?y:?o" ;[/align]
[align=left] cin>>len;[/align]
[align=left] char ch;[/align]
[align=left] cout<< "请?输??入??填??充?字??符??:" ;[/align]
[align=left] cin>>ch;[/align]
[align=left] drawable *_draw;[/align]
[align=left] switch(shap)[/align]
[align=left] {[/align]
[align=left] case 1:[/align]
[align=left] _draw = new square(len, ch);[/align]
[align=left] break;[/align]
[align=left] case 2:[/align]
[align=left] _draw = new triangle(len, ch);[/align]
[align=left] break;[/align]
[align=left] case 3:[/align]
[align=left] _draw = new circle(len, ch);[/align]
[align=left] break;[/align]
[align=left] }[/align]
[align=left] _draw->draw();[/align]
[align=left] return 0;[/align]
[align=left]}[/align]
[align=left] [/align]
[align=left] [/align]
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字符串操作

字符串操作,如字符串分割、split\find\insert....可以认为必考

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

共同点:都可以在堆上动态分配和释放内存。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: