#include //for sqrt
#include //for strlen
#include//用到setw()和setprecision()

过程控制语句

break; 退出循环,不再执行该循环
continue;退出此次循环,执行下次循环

构造函数

//构造函数是成员函数,符合类中成员函数设计规则
#include<iostream>
using namespace std;
class Desk{        //桌子
public:Desk();          //构造函数声明
private:int high, width, length;
}; //----------------------------------
class Stool{       //凳子
public:Stool(){         //类内定义构造函数high=3;  width=3;  length=3;cout<<“ ”<<high<<“ ”<<width<<“ ”<<length<<endl;}
private:int high, width, length;
}; //----------------------------------
Desk::Desk(){      //类外定义构造函数,要加类名::high=5;   width=5;   length=5;cout<<“ ”<<high<<“ ”<<width<<“ ”<<length<<endl;
}//------------------------------------
int main(){Desk da;    //自动调用构造函数Desk()Stool sa;   //自动调用构造函数Stool()
}
//析构函数名为波浪号加类名,无参数,无返回类型,作用一般是释放对象建立之初所占用的资源,改写上述代码如下
#include<iostream>
#include<algorithm>
using namespace std;
class A{int* aa, num;
public:A(int n){ num = n; aa = new int[n]; } //构造函数~A(){ delete[] aa; } //析构函数无参数,在对象结束生命期之际由系统自动调用void input(){ for(int i=0; i<num; i++) cin>>aa[i]; }void proc(){  sort(aa, aa+num);  }void print(){ for(int i=0; i<num; i++) cout<<‘ ‘<<aa[i]; }
};void f(){A a(5);    //创建对象a.input();a.proc();a.print();}  //对象a在此处消灭,自动调用析构函数~A(),达到资源释放的目的int main(){f();}//输入 8 5 3 7 2//输出 2 3 5 7 8
//C++成员函数可重载,构造函数同样也可重载
#include<iostream>
using namespace std;
class Tdate{int month, day, year;   // 默认private
public:                   // 以下四个重载函数,每个对应一种构建对象方式Tdate();Tdate(int d);Tdate(int m,int d);Tdate(int m,int d,int y);//其他公共成员
};
Tdate::Tdate(){  month=4; day=15; year=1995; }
Tdate::Tdate(int d){  month=4; day=d; year=1996; }
Tdate::Tdate(int m,int d){  month=m; day=d; year=1997;  }
Tdate::Tdate(int m,int d,int y){  month=m; day=d; year=y; }int main(){Tdate aday;Tdate bday(10);Tdate cday(2,12);Tdate dday(1,2,1998);
}
//程序中,类内是一个世界,类外是一个世界
//类内数据由成员函数来设置和修改,不允许类外直接修改数据成员(private),保护类内世界的清静,数据错误由成员函数担责
//类外是调用该类成员函数的应用程序,无须也不允许关心类的细节
class Student{int semesHour;float gpa;
public:float addCourse(int hours, float grade){gpa = semesHour*gpa+grade*hours;  //总分semesHour += hours;               //调整学时gpa /= semesHour;                 //调整平均成绩}float grade(){ return gpa; }        //获取平均成绩int hours(){ return semesHour; }    //获取学时
};
int main(){Student s;s.addCourse(3, 4.5);    //通过该成员函数修改数据成员cout<<s.gpa;            //错:不该直接取用cout<<s.grade();s.semesHour += 1;       //错:类外不允许访问类内私有数据
}

结构与数组

//批量访问结构变量用到结构数组
//若结构体大,则结构数组排序,最好用结构指针数组
#include<iostream>
using namespace std;
struct Person{  //结构定义与结构数组初始化可合成char name[20];unsigned long  id;float salary;
}a[6]={{"jone", 12345,339.0},{"david",13916,449.0},{"marit",27519,311.0},{"jasen",42876,623.0},{"peter",23987,400.0},{"yoke", 12335,511.0}};
int main(){Person* pA[6]={&a[0],&a[1],&a[2],&a[3],&a[4],&a[5] };//指针数组for(int i=1; i<6; i++)for(int j=0; j<=5-i; j++)if(pA[j]->salary > pA[j+1]->salary){  //比较工资Person* tmp = pA[j];               //交换结构指针pA[j] = pA[j+1];pA[j+1] = tmp;}for(int k=0; k<6; k++)       //通过结构指针,输出结构数组cout<<pA[k]->name<<" "<<pA[k]->id<<" "<<pA[k]->salary<<endl;
}
//结构体属于自定义数据类型
//凡类型实体都可以作为函数参数传递
//为提高效率,最好用结构的引用传递函数参数
#include<iostream>
using namespace std;
struct Person {char name[20];unsigned long id;float salary;
};
void print(Person& pr){ //输出结构实体,传递引用参数cout<<pr.name<<" "   //不影响结构实体分量的访问<<pr.id<<" "<<pr.salary<<endl;
}
Person allone[4] = { {"jone",  12345, 339.0},{"david", 13916, 449.0},{"marit", 27519, 311.0},{"yoke",  12335, 511.0} };
int main(){for(int i=0; i<4; i++)print(allone[i]);
}
//可将函数计算结果存于结构实体中,实现多值返回
#include <iostream>
using namespace std;
struct Person{char name[20];unsigned long  id;float salary;
};
Person getPerson(){ //返回结构实体 Person temp;cout<<"Please enter a name,id,salary for one person:\n";cin>>temp.name>>temp.id>>temp.salary;return temp;
}
void print(Person& p){  //传递结构引用 cout<<p.name<<"    "<<p.id<<"    "<<p.salary<<endl;
}
int main(){for(int i=0; i<3; i++)print( getPerson() );   //获得结构实体予以输出
}
//传递结构引用参数同样可以实现计算结果的多值返回

//创建链表与遍历链表
//创建链表方式多样(此举一例),遍历链表总是从链首开始
#include<iostream>
using namespace std;
struct Student{         //结构体与链首指针int number;float score;Student* next;
} *head = NULL;        //全局链首指针指向空
void create(){          //创建链表函数,使全局链首指针不为空Student *pEnd;       //链尾结点指针,用于在其后面链入结点for(int num; cin>>num && num; ){  //结点编号为0则结束Student* pS = new Student;     //新建一个结点,准备插入链表pS->number = num;cin>>pS->score;                //结点赋值(head ? Head : pEnd->next)=pS; //若空链,则接链首,否则挂链尾pEnd = pS;                     //调整链尾指针}pEnd->next = NULL;               //链尾结点指向空,表示链尾
}
void showList(){         //遍历输出链表cout<<"now the items of list are \n";for(Student* h = head; h; h=h->next) //临时结点指针h用以遍历cout<<h->number<<","<<h->score<<endl;
}
int main(){create();showList();
}
//删除链表结点
//给出要删除的结点值,先要定位结点,故删除伴随查找
//假定全局链首指针Student* head;
void remove(int num){if(head==NULL){   //排除空链情况,以免操作出错cout<<“List NULL!\n”;return;}Student* h = head;if(head->number==num){ //删除结点在链首情形head = head->next;cout<<num<<“ the head of list have been deleted\n”;delete h;return;}for(Student* ph=h->next; !ph; h=ph, ph=ph->next)if(ph->number==num){ //h与ph一前一后,若确认ph,则h好操作cout<<num<<“ have been deleted\n”;h->next = ph->next;  //h跨过ph指向下一个结点delete ph;            //删除ph指向的结点return;}
}
//插入链表结点
//若给出插入位置(用结点指针表示)则插入表示为
void insert(int num,  Student* pos){  //要插入在pos位置结点之后Student* p = new  Student;  //创建新结点p->number = num;            //新结点赋值p->next = pos->next;        //新结点接入pos位置之后结点pos->next = p;              //pos位置结点链接上新结点
}
创建链表的过程可看作不断在链首插入结点的过程,也可看作不断在链尾插入结点的过程

简单程序回顾


C++学习笔记与回顾(构造函数、链表等)相关推荐

  1. 拉勾启源老师mysql讲义,【拉勾教育数据分析实战训练营】--Tableau学习笔记-重点回顾1...

    [拉勾教育数据分析实战训练营]--Tableau学习笔记-重点回顾1 [拉勾教育数据分析实战训练营]--Tableau学习笔记-重点回顾1 以下是我搜罗的一些官方优秀case分享: 1.https:/ ...

  2. [增强学习][Reinforcement Learning]学习笔记与回顾-1

    引言 增强学习这几篇博客在于学习增强学习中所获得知识的理解与回顾,如果想要深入学习增强学习,请参考后文所列出的资料和书籍.本文只用于复习与理解. Introduction to Reinforceme ...

  3. 【C++学习笔记2】构造函数、析构函数、函数多态、抽象类、函数模板

    这次笔记介绍构造函数.析构函数.函数多态.抽象类.函数模板 一.构造函数 1.在定义对象,构造函数程序将自动执行,他的类型跟类名一致 函数声明最好放在自己的类里面,这样才符合类的封装,也可以像下面一样 ...

  4. [增强学习][Reinforcement Learning]学习笔记与回顾-2-马尔可夫决策过程MDP

    Markov Decision Processes 前言 本文主要是视频学习的总结与回顾,想要了解更多内容请看视频或者学习专业课程.这一节主要是说马尔可夫决策过程-Markov Decision Pr ...

  5. C++学习笔记-----不要在构造函数和析构函数中调用虚函数

    考虑下面的程序: #include <iostream> using namespace std;class Base { public:Base() { cout << &q ...

  6. datawhale组队学习笔记(2)链表

    链表基础知识: 结构: ①逻辑结构:集合.线性结构(一对一).树形结构(一对多).图结构(多对多): ②存储结构:顺序存储(顺序表).链式存储(链式表).索引存储.散列存储. 2.链表分类: ①单链表 ...

  7. Effective C++学习笔记之copy构造函数和default函数和copy赋值函数(operator=)

    1 .C++一个空的类里面一般默认的函数 比如我们写 class A {}; 一般里面系统会给你哪些默认函数呢? class A { public:A(){} //default函数~A(){} // ...

  8. 数据结构学习笔记(六)链表算法题

    假期结束,看点题目. 第一题 问题 设顺序表用数组A[]表示,表中元素存储在数组下标1~m+n的范围内,前m个元素递增有序,后n个元素递增有序,设计一个算法,使得整个顺序表有序. (1)给出算法的基本 ...

  9. 深度探索C++对象模型 学习笔记 第二章 构造函数语意学

    很多人抱怨说C++背着程序员做了太多事,如: if (cin) { /* ... */ } 为了让cin能转换为真假值,为cin定义一个类型转换运算符operator int(),就可以完成以上工作了 ...

最新文章

  1. oracle如何给表上锁,【ORACLE】Oracle中发生表加锁、死锁的原因,查看,与解决方法...
  2. java ejb3.0_初识EJB3.0 ---配置与运行篇
  3. Git和Repo管理使用简要介绍
  4. RHEL5中YUM命令解决RPM包依赖性
  5. axios的get与post
  6. 事物与数据库底层数据
  7. 企业实战03:Oracle数据库_用户和表空间
  8. CyberArk:被忽略的特权账号管理已进入蓝海
  9. 三天打鱼两天晒网python程序设计_Python经常会遇到三天的笔试题:钓鱼和两天的晒网:,之,三天打鱼,两天晒网...
  10. mysql 锁设置密码_[转载]mysql锁小结
  11. java-数组排序--插入排序
  12. flag--命令行参数解析之StringVar
  13. HDU4505 小Q系列故事——电梯里的爱情【水题】
  14. 如何在装有 macOS Monterey 的 Mac 上使用省电模式?
  15. ## 数据结构之单向链表的基本操作详细总结 爆肝总结超详细万字长文C语言版
  16. GNSS最终、快速、超快速星历下载地址汇总
  17. 景观指数分析 - 初识FragStats4.2
  18. 局域网组网方案,电信1000M宽带无线WiFi满速方案与排查(随记)
  19. 网易邮箱账号注册twitter开发者api权限,无法收到确认邮件
  20. 什么是 480i、576i、480p、1080i、720p?什么是 HDTV?

热门文章

  1. Visual Effect Graph——块和操作符
  2. 概率统计D 01.06 伯努利概型
  3. 音视频:12.FFmpeg-音乐播放器1
  4. OJB简介--翻至ojb docs (转)
  5. 正使用其他防病毒提供程序
  6. 汇编语言的应用(用途)
  7. 论文查重网站要怎么选?
  8. 配置AAA认证和授权
  9. 江苏省计算机技能大赛项目,南通职业大学荣获2020年江苏省职业院校技能大赛计算机网络应用赛项一等奖...
  10. 怎么用计算机计算每月电费,电费每个月怎么算的 电费阶梯电价是怎样算