Cấu trúc (struct)
----------------------------------------------------Con trỏ cấu trúc (struct pointer)
CODE
struct Student
{
int id;
};
Student *s;
Student m;
s=&m;
s->id=3; //means (*s).id
cout<<m.id;
-----------------------------------------
Sao chép cấu trúc
CODE
struct Student
{
int id;
char *name; //một con trỏ, không phải một mảng
};
Student a;
char temp[20];
cin>>temp;
a.name=new char[strlen(temp)+1];
strcpy(a.name,temp); //phải dùng biến tạm
Student b=a;
strcpy(b.name,a.name); //phải dùng strcpy, nếu không sẽ sao chép địa chỉ bộ nhớ
-------------------------------------------------
Gọi hàm với cấu trúc
CODE
struct Student{
char name[10];
int id;
};
Student m[3],a;
m[0]=(Student){"Pete",1};
add(m[0].name,&m[0].id);
------------------------------------------------------------
Có 4 cách để thêm dữ liệu vào cấu trúc.
Cách 1
CODE
void add(char name[],int *place)
{
cin>>name;
cin.get();
cin>>*place;
}
add(a.name,&a.id);
Cách 2
CODE
void add(Student &s)
{
cin>>s.name;
cin.get();
cin>>s.id;
}
add10(a);
Cách 3
CODE
void add(Student *s)
{
cin>>(*s).name;
cin.get();
cin>>(*s).id;
}
add(&a);
Cách 4
CODE
void add(Student *s)
{
cin>>s->name;
cin.get();
cin>>s->id;
}
add(&a);
--------------------------------------------------
Toán tử sizeof với struct
CODE
struct Hello
{
char c;
double d;
};
sizeof(Mystruct)=12; vì c lấy một 32-bit word (4 byte, không phải 1 byte)
----------------------------------------------
Con trỏ (pointer)
Con trỏ trỏ đến một con trỏ khác
CODE
char a='z'; //a='z' và giả sử địa chỉ của a=8277
char *p=&a; //p=8277 và giả sử địa chỉ của p=6194
char **p2=&p; //p2=6194 và địa chỉ của p2 sẽ là một cái gì đó
Con trỏ void (void pointer)
Con trỏ void dùng để trỏ đến bất cứ một kiểu dữ liệu nào
CODE
void increase(void* data,int dataType)
{
switch(dataType)
{
case sizeof(char):
(*((char*)data))++;break;
case sizeof(int):
(*((int*)data))++;break;
}
}
int main()
{
char c=66;int a=-4;
increase(&c,sizeof(char));
increase(&a,sizeof(int));
}
Con trỏ hàm (function pointer)
Con trỏ hàm dùng để trỏ đến một hàm
CODE
int addition(int a,int b)
{
return a+b;
}
int subtraction(int a,int b)
{
return a-b;
}
int (*minuse)(int,int) = subtraction;
int primi(int a,int b,int(*functocall)(int,int))
{
return (*functocall)(a,b);
}
int main()
{
int m=primi(7,5,&addition);
int n=primi(20,m,minuse);
cout<<m<<endl;cout<<n<<endl;
return 0;
}
----------------------------------------------------------------
Hàm nội tuyến (inline function)
Hàm khai báo với từ khóa inline, trình biên dịch sẽ chèn toàn bộ thân hàm mỗi nơi mà hàm đó được sử dụng. Với cách này, các
hàm inline có tốc độ thực thi cực nhanh, nên sử dụng với các hàm thường xuyên phải sử dụng trong chương trình.
CODE
inline void display(char *s)
{
cout<<s<<endl;
}
int main()
{
display("Hello");return 0;
}
---------------------------------------------------------
Nhập xuất với tập tin
CODE
#include <fstream>
#include <iomanip>
int number;
ifstream inf;ofstream outf;
inf.open("input.txt");
outf.open("output.txt");
while(in>>number)
outf<<"Next is"<<setw(4)<<number<<endl;
inf.close();
outf.close();
Mở một file dùng cho cả nhập và xuất
CODE
fstream f;
f.open("st.txt",ios :: in | ios :: out);
một số chế độ hay dùng
ios :: in nghĩa là nhập vào
ios:out nghĩa là xuất ra tập tin từ đầu tập tin
ios::app nghĩa là thêm dữ liệu vào tập tin (appending)
Tập tin header
Tạo một tập tin header có tên là myfile.h
#ifndef MYFILE_H
#define MYFILE_H
……
#endif
trong tập tin cpp thêm vào dòng
#include "myfile.h"
Thứ Tư, 8 tháng 6, 2016
Đăng ký:
Đăng Nhận xét (Atom)
0 nhận xét:
Đăng nhận xét