1.输出浮点型
#include <iostream>
double a =3.141596;
cout<<fixed<<setprecision(3)<<a<<endl; //输出小数点后3位
2.
字符串比较:strcmp (str1, str2)
求字符串长度:strlen (str)
字符串复制:strcpy (str1, str2)
字符串连接:strcat (str1, str2)
3.
常量指针
const int p=[HTML_REMOVED]
这个p可以指向常量和变量,指向常量的时候,不能通过p更改常量的值,但是p可以指向别的常量/变量 ;指向变量时,不能通过p间接访问更改变量的值 ,只能直接访问变量,然后改变变量的值
指针常量
int * const p=[HTML_REMOVED]
这个p是指针常量,在定义指针常量的时候必须初始化,就像常量初始化一样;
不能修改p指向的东西(常量/变量),p不可改 p可改。即p的地址不能改变
4.动态数组的创建和delete
一维:
int n;
cin>>n;
int* a = new int[n];
delete [] a;
二维:
int n,m;
cin>>n>>m;
int** a=new int* [m];
for(int i=0;i<m;i++) a[i]=new int [n];
for(int i=0;i<m;i++) delete a[i];
delete a;//错了的话多加个[]
遍历每一个元素 ((p+i)+j)
推到类和对象 调用有参构造函数生成对象数组
int n=3;
Phone **p=new Phone*[n];
for(int i=0;i<n;i++) p[i]=new Phone(x,y,z);
for(int i=0;i<n;i++) delete p[i];
delete p;
5.
指针部分:
1.三个数排序(大到小)
cin >> a >> b >> c;
int* pa = &a, * pb = &b, * pc = &c;
if (*pa < *pb) swap(pa, pb);
if (*pa < *pc) swap(pa, pc);
if (*pb < *pc) swap(pb, pc);
cout << *pa << ' ' << *pb << ' ' << *pc << endl;
2.指针与数组
for(int *p=array;p<array+15;p++)
cout<<*p<<" ";
for(int *p=array,i=0;i<15;i++)
cout<<*(p+i)<<" ";
3.密钥加密法
char *ch1=new char[25];//明文
char *ch2=new char[25];//密钥
char *ch3=new char[25];//密文
int cnt=0;
char *s=ch3;
cin>>ch1>>ch2;
int len1=strlen(ch1),len2=strlen(ch2);
//p q s
for(char *p=ch1;p<ch1+len1;p++) {
char *q=ch2+cnt++;//
if(cnt==len2) cnt=0;
//
if(*p>='a'&&*p<='z') *s++=(*p-'a'+(*q-'0'))%26+'a';
else *s++=(*p-'A'+(*q-'0'))%26+'A';
}
cout<<ch3<<endl;
delete ch1;
delete ch2;
delete ch3;
4.复合类 // 字符数组
(1).
class CDate {
private:
int year, month, day;
public:
CDate(int y, int m, int d) {
year = y; month = m; day = d;
}
};
class CStudent {
private:
char* p_name;
CDate birthday, entryday;
public:
CStudent(const char* p_val, int b_y, int b_m, int b_d, int e_y, int e_m, int e_d)
: entryday(e_y, e_m, e_d), birthday(b_y, b_m, b_d) {
p_name = new char[strlen(p_val) + 1];
strcpy(p_name, p_val);
}
~CStudent() { delete[] p_name; }
};
(2).建议用第一种方法
class CDate {
private:
int year, month, day;
public:
CDate(int y, int m, int d) { year = y; month = m; day = d; }
CDate() { } //这种方法需要有一个无参的构造函数
void setDate(int y, int m, int d) { year = y; month = m; day = d; }
};
class CStudent {
private:
char* p_name;
CDate birthday;
public:
CStudent(const char* p_val, int y, int m, int d) {
p_name = new char[strlen(p_val) + 1];
strcpy(p_name, p_val);
birthday.setDate(y, m, d); //调用setDate对子对象birthday初始化
}
~CStudent() { delete[] p_name; }
};
5.前向引用声明举例
class Bar; //前向引用声明
class Foo
{
public:
void f(Bar bar);
};
class Bar
{
public:
void g(Foo foo);
};
6.拷贝构造函数(对象成员包含数组,指针之类的才去自己写拷贝构造,也许吧)
class CDate {
private:
int year, month, day;
char* p_date; //这是一个字符数组吧
public:
CDate(int y, int m, int d, const char* p_val){
year = y; month = m; day = d;
p_date = new char[strlen(p_val) + 1];
strcpy(p_date, p_val);
}
CDate(const CDate& r){
year = r.year; month = r.month; day = r.day;
//对于指针/数组,要重新分配内存!!!
p_date = new char[strlen(r.p_date) + 1];//最后还有一个\0 所以要加1
strcpy(p_date, r.p_date);
}
~CDate(){
delete[] p_date;
}
};
7.静态数据成员
class Student {
public:
static int noOfStudents; //不能写成noOfStudents=0;
Student() {
noOfStudents++;
}
~Student() {
noOfStudents--;
}
};
int Student::noOfStudents = 0; //静态数据成员初始化不受访问权限控制
int main() {
Student s1, s2;
cout << "noOfStudents = "
<< Student::noOfStudents << endl; //用类名引导
}
8.静态函数
class Student {
static int noOfStudents; //私有静态数据成员
public:
Student() {
noOfStudents++;
}
~Student() {
noOfStudents--;
}
static int number() { //静态成员函数
return noOfStudents;
}
};
int Student::noOfStudents = 0; //静态数据成员初始化不受访问权限控制
int main() {
Student s1,s2;
cout << "noOfStudents = "
//<< Student::noOfStudents << endl; //无法访问私有成员 错的!!!
<< Student::number() << endl; //调用静态成员函数用类名引导
}
9.友员
class Point { //Point类声明
public: //外部接口
Point(int x = 0, int y = 0) : x(x), y(y) { }
int getX() { return x; }
int getY() { return y; }
friend float dist(Point& a, Point& b);
private: //私有数据成员
int x, y;
};
float dist(Point& a, Point& b) {
double x = a.x - b.x;
double y = a.y - b.y;
return sqrt(x * x + y * y);
}
int main() {
Point p1(1, 1), p2(4, 5);
cout << "The distance is: ";
cout << dist(p1, p2) << endl;
return 0;
}
10.友员和友元函数
class Date; //对Date类的提前引用声明
class Time {
public:
void display(Date&);
//display是成员函数,形参是Date类对象的引用
};
class Date {
public:
friend void Time::display(Date&);
//声明Time中的display函数为友元成员函数
};
11.友员是一个类
class A {
public:
friend class C; //这是友元类的声明
private:
int data;
};
class C { //友元类定义,为了访问类A中的成员
public:
void set_show(int x, A& a) {
a.data = x;
cout << a.data << endl;
}
};
int main(void) {
class A a;
class C c;
c.set_show(1, a);
return 0;
}