cout< struct Date{ int year; int month; int day; }; void show(Date a[],int n) { for(int i=0;i cout< void show(Date a[],int n,int Date::*p) { for(int i=0;i cout< void sort(Date a[],int n,int Date::*p) { for(int i=0;i if((a[i].*p)>(a[j].*p)) swap(a[i],a[j]); } } int main() { Date a[4]={{2010,4,5},{2008,8,8},{2010,12,24},{2000,10,10}}; show(a,4,&Date::year); show(a,4,&Date::day); sort(a,4,&Date::day);//按指定的成员day来排序 show(a,4); } void *malloc(size_t size);//内存分配 void *realloc();//重新分配内存 void *calloc(size_t nmemb,size );//把新分配的内存块用填满; 利用数组进行冒泡排序!!!! 冒泡排序:8 9 5 4 2 0 第一趟: 8 9 5 9 4 9 2 9 0 9-------------------(5次) 第二趟: 8 5 4 2 0 5 8 4 8 2 8 0 8------------------------(4次) 第三趟: 5 4 2 0 4 5 2 5 0 5------------------------------(3次) 第四趟: 4 2 0 2 4 0 4-------------------------------------(2次) 第五趟: 2 0 0 2-------------------------------------------(1次) 总结: N个数比较N-1趟 第i趟比较N-i次 思想:每一趟都是相邻两个数比较,小数在前面,大数在后面,如不是就交换,比较一趟之后可以得到一个最大的数在最下面 *********************2010年09月16日 星期四 09时19分09秒 (第九天)********************************** C++:一个函数,也可以做为结构变量中的一个成员 struct Student() { int num;//学号 string name; Student* friend1; void init(int num,string name)//函数做员 { Student::num=num;//可用域操作符解决重名问题,当然可以把形参取不同的名,不过也可以不用,因为局部优先 Student::name=name; } Ratio(){cout<<\ }; 在主函数中: stu.init(11,\ 在创建变量时,系统会默认调用一个和Studnet同名的函数Studnet()。这个函数无返因类形,称为构造函数。所以不必自已写一个初始化函数,直接把初始化变量成员的语句放在,构造函数中。(初始化可以防止出现垃圾数据) this:表示用来调这个成员函数变量的地址,如stu.init()那么this就是&stu; 如在stu.init(){函数中可以stu1.friend1=this;} 类:class与结构体有以下最大的不同 类中所有成员默认,只允许自已的成员函数访问不允许外部访问,除非声明 访问权限 private:私有的 public:公开的 Object:对象,就是类的具体实例。 OO面象对象 抽象abs:是封装的前提] 封装之后,可以保护数据 描述对象的类象,创建对象,使用对象 Point p1,p2(7,9);//在定义对象的同时,系统自动调用了带参的构造函数,完成了初始化。 Point p1();//错误,因为会认这是一个函数声明; 一个对象可以没有名字,称为匿名对象, 如Point (7,9);只能当场使作如return Point(9,9); 如 f().print(); Point f() { return Point(9,9); } 如果直接Point(9,9), 构造函数:destructor 析构函数:一个函数在结束的时候,编译器也会自动调用一个函数,称为析构函数 作业: 写一个随机数类,提供一个有两个参数的构造函数指定随机数的范围,成员函数int Rand()用来每次调用取得一个指定范围围的随机数。 .rand()//就可以产 2,写一个时钟类,提供一个构造函数。,把时间初如化成0点0分0秒。成员函数set(int h,int m,int s)来设置时钟的时间,无参的函数run让时中走起来 怎么样时间过一秒 反复掉用long t=time(NUll); while((time(NULL)!=t),如取到的时间跟一次时间不同了,意味着时间过去了一秒。 *********************2010年09月17日 星期五 09时19分43秒 (第十天)********************************** 类的四大特征:封装,继承,多态,抽象 类: 数据一般私有, 行为一般公有。 构造 函数:创建 对象时,先分配空间,再调构造函数。 析构函数:对象释放时,先调用析构,现恢复空间 对象.成员 this.成员//this指向当前对象 类名::成员 引用&:双方共用同一块空间 对成员变量初始化:可以在构造函数中写初始化列表 格式----:成员变量名(所赋的值) Array(unsigned len) :n(len),p(new T(len))--------------------成员变量初始化列表(只用于构造函数中,代替下面两句) { //p = new T[len];//realloc() //n = len; cout << \分配额外\元素空间在\ } 类中的函数方法,约定不允许修改成员变量------在函数头后加const(表只对当前对象的数据成员只作读操作。) void print()const { while(n>0)//而n是成员变量,这样就修改了n,这样不可以,改为int i=n ; 输出p[--i]; cout< } 零初始化T():如对基本类型而言就是0,而对于类,表示匿名对象 p[i]=T();//如p[i]只能放string型,而 要p[i]=0;就错误,所以赋值T()进行零初始化 动态生成:Array a(5); const Array b=a;//复制一个数组对象。就是b,a指向同一块new,所指的空间。而程序结束后,调析构函数。a所指的内存已 经释放,再释放b所指的空间,系统就会提示:已放弃 区别const的用法 Time const t1;或const Time t1;表示t1是常Array(unsigned len) :n(len),p(new T(len)) { p = new T[len];//realloc n = len; cout << \分配额外\元素空间在\ }对象,其值在任何情况下都 不能初改变(这个对象只能调用带const的方法) 拷贝构造函数,一个类有一个默认的拷贝构造函数 Array(const Array& x) 作用:如当一个对象复制给令一个对象时用到 自已定拷贝构造函数 Array(const Array& x)把一个x. :n(x.n),p(new T[x.n]) { //n=x.n; //p=new T[x.n]; for(int i=0;i 只有使用了动态内存,才有必要自已改写拷贝构造函数,否则默认就够了。
C++学习宝典(笔记)(7)
2019-07-13 16:41
C++学习宝典(笔记)(7).doc
将本文的Word文档下载到电脑
下载失败或者文档不完整,请联系客服人员解决!