当前位置: 魅力文档网 > 范文大全 > 公文范文 >

c,,个人笔记总结

| 来源:网友投稿

 C++ 个人笔记总结

 --------------------------------- 王 王 小 小 龙 龙 ---------------

 Good luck

 Believe yourself

  Just go

 概述:

 一 、 C++ + 语言语法基 础 (6)

 1.从 C 到 C++的过渡 2.类和对象 3.操作符重载 4.继承与多态 5.异常和 I/O 流

 二、数据结构和算法

 1.基本数据结构,堆栈、队列、链表、二叉树,实现和应用(2) 2.排序和查找算法

 三、模板和 和 STL

 1.模板语法 2.STL

  四、阶段项目

 简化的企业管理信息系统(MIS)

 第一 课

 从 从 C C 到 到 C++ + 的过渡

 一、背景介绍

 算盘 - 面向硬件的编程 电子计算机 - 机器语言的编程 1010

 - 汇编语言的编程 ADD

 - 高级语言的编程 Fortran

 printf ("%d", 12);

 - 结构化程序设计 C/PASCL

 顺序、分支、循环、函数

 - 面向对象的程序设计 C++/Java/C#

 - 面向问题的程序设计 1960 - Algol 60,算法语言,远离硬件,不适合进行系统开发 1963 - 剑桥大学,CPL,在 Algol 60 的基础上增加对系统开发的支

 持,复杂,不易掌握,不易使用 1970 - MIT,BCPL,CPL 的精华版,易学易用,太慢,不实用 1972 - Ken Thomposon,B 语言,通过运行时支持优化 BCPL 的性能,缺少类型 1973 - Dennis Ritchie,C 语言,用 C 重新实现 UNIX 内核 1978 - 《The C Programming Language》,第一个 C 语言的事实标准 1989 - ANSI C,C89 1990 - ISO C, C90 1999 - ISO C 修订,C99 197X - Bajarne Stroustrup,simula 早期的面向对象语言,性能低

 下,B 语言。

 1979 - 贝尔实验室,多核 UNIX 系统仿真,Cpre, 通过扩展宏为 C 语言增加类似 simula 的面向对象机制。C with Class: simula - 类 Alogo 68 - 操作符重载 Ada - 模板、名字空间 Smalltalk - 引用、异常 C 是 C++的子集,C++是对 C 的扩展。

 1983 - C++命名 1985 - CFront 1.0,第一款商用 C++编译器 1987 - GNU C++ 1990 - Borland C++ 1992 - Microsoft C++,IBM C++ 1998 - ISO C++98 2003 - ISO C++03 2011 - ISO C++2011/C++11/C++0x

 二 、 C++ + 语言的使用领域:

 1.游戏开发:强建模能力,性能高。

 2.科学计算:FORTRAN,C++算法库。

 3.网络和分布式:ACE 框架。

 4.桌面应用:VC/MFC,Office,QQ,多媒体 5.操作系统和设备驱动:优化编译器的发明使 C++在底层开发方面可

  以和 C 向媲美。

 6.移动终端

  既需要性能,同时又要有面向对象的建模。

  三 、 C++ +比 比 C C 更丰富

 1.支持面向对象,将问题域和方法域统一化。宏观面向对象,微观面

  向过程。

 2.支持泛型编程。

 int add (int a, int b) { ... } template<typename T> T add (T a, T b) { ... } 3.支持异常机制。

 int func (void) {

  ... } int main (void) {

  if (func () == -1) {

 错误处理;

  } } 4.操作符重载

 四、第一个 个 C++ + 程序

 1.编译器:g++,如果用 gcc 需要带上-lstdc++, 指定其使用标准 c++的运行库。

 2.源文件扩展名:.cpp/.cc/.C/.cxx/.c++,最好用.cpp

 3.头文件:#include <iostream>

  大多数标准库头文件都没有.h 后缀。

 4.输出:cout - 标准输出对象

  输入:cin

 - 标准输入对象

  插入运算符:<<

  提取运算符:>> 5.std:所有标准库的函数、对象、类型都位于 std 名字空间中。

 五、名字空间

 1 1. . 对程序中的标识符(类型、函数、变量 ), ,

 按照某种逻辑规则划分成若干组。

  2 2. . 定义名字空间

 namespace 名字空间名 {

  名字空间成员; }

 3 3. . 使用名字空间

 1 1 作用于限定符:名字空间 名: :: : 名字空间成员,

 表示访问特定名字空间中的特定成员。

 例子:

 #include <iostream> int main (void) {

 std ::cout << "Hello, World !" << std ::endl;

 int i;

 double d;

 char s[256];

 //

 scanf ("%d%lf%s", &i, &d, s);

 std ::cin >> i >> d >> s;

  //

 printf ("%d %lf %s\ \ n", i, d, s);

  std ::cout << i << " " << d << " " << s << "\n";

 return 0; } ---------------------------------------------------------

 2 2 名字空间指令:

 using namespace 名字空间名; 在该条指令之后的代码对指令所指名字空间中的所有成员都可见, 可直接访问这些成员,无需加“::”。

 例 :

 using namespace std;

 3 3 名字空间声明:

 using 名字空间名::名字空间成员; 将指定名字空间中的某个成员引入当前作用域, 可直接访问这些成员,无需加“::”。

 4 4. . 匿名名字空间

 如果一个标识符没有被显示地定义在任何名字空间中, 编译器会将其缺省地置于匿名名字空间中。

 对匿名名字空间中的成员通过“::名字空间成员”的形式访问。

 5 5. . 名字空间合并

 6 6. . 名字空间嵌套

 namespace ns1 {

  namespace ns2 {

  namespace ns3 {

  void foo (void) { ... }

  }

  }

 } ns1::ns2::ns3::foo (); using namespace ns1::ns2::ns3; foo (); ---------------

 例子:名字空间

 #include <iostream> using namespace std; //namespace {

 void print (int money) {

  cout << money << endl;

 } //} //

 农行名字空间

 namespace abc {

 int balance = 0;

 void save (int money) {

  balance += money;

 }

 void draw (int money) {

  balance -= money;

 } } namespace abc {

 void salary (int money) {

  balance += money;

 }

 void print (int money) {

  cout << "农行:";

  ::print (money);

 } } //

 建行名字空间

 namespace ccb {

 int balance = 0;

 void save (int money) {

  balance += money;

 }

 void draw (int money) {

  balance -= money;

 }

 void salary (int money) {

  balance += money;

 } } int main (void) {

 using namespace abc; // 名字空间指令

 save (5000);

 cout << "农行:" << balance << endl;

  draw (3000);

 cout << "农行:" << balance << endl;

  ccb::save (8000);

 cout << "建行:" << ccb::balance << endl;

 ccb::draw (5000);

 cout << "建行:" << ccb::balance << endl;

 using ccb::salary; //

 名字空间声明 // using abc::salary;

 salary (6000);

 cout << "建行:" << ccb::balance << endl;

 abc::print (abc::balance);

 return 0; }

 六 、 C++ + 中的结构、联合和枚举

  1 1. . 结构

  和 C 语言的不同:

 1)定义结构型变量时,可以省略 struct 关键字。

 2)结构内部可以定义函数——成员函数。

 3)sizeof (空结构) -> 1

  例子:

 #include <iostream> using namespace std; struct Student {

 char name[128];

 int age;

 void who (void) {

  / // / 成员函数

  cout << "我叫" << name << ",今年" << age

 << "岁了。" << endl;

 } }; int main (void) {

 Student student = {"张飞", 25}, *ps = &student;

 student.who ();

 ps->who ();

 struct A {};

 cout << sizeof (A) << endl;

 return 0; } ----------------------------------------------------------- 2 2. . 联合

 增加了匿名联合的概念。借用联合语法形式, 描述一些变量在内存中的布局方式。

 int main() {

 UNION

  {

  int a;

  char ch[4];

 };

  a=0x12345678; } 定义联合变量时,可以不加 union 例子:

 #include <iostream> using namespace std; int main (void) {

 //

 匿名联合

 union {

  int x;

  char c[4] /*= {"A", "B", "C", "D"}*/;

 };

 cout << (void*)&x << " " << (void*)c << endl;

 x = 0x12345678;

 for (int i = 0; i < 4; ++i)

  cout << hex << (int)c[i] << " ";

 cout << endl;

 return 0; }

  ---------------------------------------------------

 3 3. . 枚举

 枚举是一个独立的数据类型。

 C: enum E {a, b, c}; enum E e; e = a; e = 1000; C++: enum E {a, b, c}; E e; e = a; e = b; e = c; b=1;

  //

 ERROR !

 e = 1000; // ERROR !

 e = 1;

 // ERROR !

 例子:

 #include <iostream> using namespace std; int main (void) {

 enum E {a, b, c};

 E e;

 e = a;

 e = b;

 e = c;

 // e = 1000; // 报错

  // e = 1;

  // 报 错

  return 0;}

 七 、 C++ + 的布尔类型,跟在 在 cout t 后面可以 以 boolalpha

 bool b = true; b = false; cout << sizeof (b) << endl; // 1 b = 100; b = 1.234; b = "hello"; b = "A"; 八 、 C++ + 中的运算符别名

 && - and || - or &

 - bitand

 ^

 - xor {

 - <%

  }

 - %> [

 - <: ]

 - :>

 九 、 C++ + 中的函数

 1 1. . 重载:条件

  在同一个作用域中,

 函数名相同,

 参数表不同的函数,

 构成重载关系。

 C++编译器会对程序中的函数做换名, 将参数表中的类型信息汇合到函数名中,以保证函数名的唯一。

 通过 extern "C",可以要求编译器不做 C++换名,以方便在 C 语言的模块中使用 C++编译生成的代码。

 方式一:

 extern "C" {

 int add (int a, int b) {

 return a + b;

 } }

 int sub (int a , int b) {

 return a - -

 b;

 } }

 } }

 方式二:

 extern "C" int add (int a, int b, int c) {

 return a + b + c;

 } } 2 2. . 缺省参数和哑元参数

 1)如果调用一个函数时,没有提供实参,那么对应形参就取缺省值。

 2)如果一个参数带有缺省值,那么 它后边的所有参数必须都带有缺省值。

 3)如果一个函数声明和定义 分开,那么缺省参数 只能放在声明中。

 4)避免和重载发生歧义。

 5)只有类型而没有名字的形参,谓之哑元。

 i++ - operator++ ++i V1: void decode (int arg) { ... } V2: void decode (int) { ... } 例子 子 1 1 :重载与缺省值

 #include <iostream> using namespace std; void foo (int a = 10, double b = 0.01,

 const char* c = "tarena");

  / // / 函数 数 1 1

 void foo (void) {}

  / // / 函数 数 2 2 / // / 函数 数 1 1 与函数 数 2 2 构成重载关系

 void bar (int) {

 / // / 函数 数 3 3

 cout << "bar(int)" << endl; } void bar (int, double) {

 / // / 函数 数 4 4

  cout << "bar(int,double)" << endl; }

 / // / 函数 数 3 3 与函数 数 4 4 构成重载关系

 int main (void) {

 foo (1, 3.14, "hello");/ // / 调用函数 数 1 1

 foo (1, 3.14);

  / // / 调用函数 数 1 1

  foo (1);

  / // / 调用函数 数 1

 //

 foo (); // 歧义

 ,可以调用函数 数 2 2 ,但也可以调用函数 数 1 1 ,因为函数 数 1 1 在不提供实参的情况下, 可以取缺省值。

  bar (100);

  / // / 调用函数 数 3 3

 bar (100, 12.34);

 / // / 调用函数 数 4 4

 return 0; } --------------------------------------

 例子 子 2 2 :重载与作用域

 #include <iostream> using namespace std; namespace ns1 {

 int foo (int a) {

  函数 数 1 1

 cout << "ns1::foo(int)" << endl;

  return a;

 } }; namespace ns2 {

 double foo (double a) {

  函数 数 2 2

 cout << "ns2::foo(double)" << endl;

  return a;

 } }; int main (void) {

 using namespace ns1;

 //

 名字空间指令

 using namespace ns2;

 //

 名字空间指令

 cout << foo (10) << endl;

 //10

 调用函数 数 1 1 ,作用域可见 见 ns2 2 与 与 ns1 1 ,所以与函数 数 2 2 构成重载

  cout << foo (1.23) << endl;

 //1.23

 调用函数 数 2 2 ,作用域可见 见 ns2 2 与 与 ns1 1 ,所以与函数 数 1 1 构成重载

 using ns1::foo;

 / // / 名字空间声明 (当同时出现名字指令与名字空间声明,则名字空间声明会隐藏名字空间指令)

  cout << foo (10) << endl;

 //10 0 ,调用函数 数 1 1 ,只可见名字空间 间 ns1 1 的 的 foo(), , 所以也并不构成重载。

  cout << foo (1.23) << endl;

 //10 0 ,调用函数 数 1 1 ,只可见名字空间 间 ns1 1 的 的 foo(), , 所以也并不构成重载。

 using ns2::foo;

 / // / 名字空间声明

 cout << foo (10) << endl;

 //10 0 ,调用函数 数 1 1 ,可见名字空间 间 ns1 1 与名字空 间ns2 2 的 的 foo(), , 所以构成重载。

 cout << foo (1.23) << endl;

 //1.23 3 ,调用函数 数 2 2 ,可见名字空间 间 ns1 1 与名字空间 间 ns2 2 的foo(), , 所以构成重载。

  return 0; } --------------------------------------------------------

 3 3. . 内联

 1)编译器用函数的二进制代码替换函数调用语句,减少函数调用的时间开销。这种优化策略成为内联。

 2)频繁调用的简单函数适合内联,而稀少调用的复杂函数不适合内联。

 3) 递归函数无法内联。

 4)通过 inline 关键字,可以建议编译对指定函数进行内联,但是仅仅是建议而已。

  inline void foo (int x, int y){...}

 十 、 C++ + 的动态内存分配

 malloc/calloc/realloc/free 1.new/delete:对单个变量进行内存分配/释放 2.new[]/delete[]:对数组进行内存分配/释放 例子 :

 new w 与 与 delete

 #include <iostream> using namespace std; int main (void) {

  // int* pi = (int*)malloc (sizeof (int));

  // free (pi);

 //c c 中的方法

 int* pi = new int;

 *pi = 1000;

 cout << *pi << endl;

 delete pi;

  / // / 一定要释放内存,否则会造成内存泄露,很严重

  pi = NULL;

  / // / 不要忘记这个, 虽然不会报错,但是要有好习惯

  /*

  *pi = 2000;

 cout << *pi << endl;

  //pi i 指向的内存地址已经被释放,被初始化为指向 向 NULL

 */

 pi = new int[10];

 for (size_t i = 0; i < 10; ++i)

  pi[i] = i;

 for (size_t i = 0; i < 10; ++i)

  cout << pi[i] << " ";

 cout << endl;

 delete[] pi;

 / // / 千万记住 住 new[] ] 要用 用 delete[] ] 来释放内存

  pi = NULL;

 pi = new int (1234);

  / // /用 用 new w 分配内存的同时初始化赋一个值。

  cout << *pi << endl;

 //1234

 delete pi;

 pi = NULL;

 char buf[4] = {0x12,0x34,0x56,0x78};

 pi = new (buf) int;

 cout << hex << *pi << endl; //

 delete pi;

  cout << (void*)pi << " " << (void*)buf << endl;

 int (*p)[4] = new int[3][4];

 delete[] p;

 int (*q)[4][5] = new int[3][4][5];

 delete[] q;

 return 0; } 十一、引用

 1 1. . 引用即别名。

 int a = 20; int& b = a; // int* b = &a; b = 10; // *b = 10; cout << a << endl; // 10 2 2. . 引用必须 初始化。

 int a; int* p; a = 20; p = &a; int& b; // ERROR ! int& b = a; // OK 3 3. . 引用一旦初始化就不能再引用其它变量。

 int a = 20, c = 30; int& b = a; b = c; // c => b/a 4 4. . 引用的应用场景

 1 1) ) 引用型参数

 a.修改实参 b.避免拷贝,通过加 const 可以防止在函数中意外地修改实参的值,同时还可以接受拥有常属性的实参。

 2 2) ) 引用型返回值

 int b = 10; int a = func (b);


推荐访问:笔记

热门排行

大学生对新时代的理解500字9篇

大学生对新时代的理解500字9篇大学生对新时代的理解500字篇1一代人有一代人的长征,代人有一代人的担当。今天,新时代青年面临着难得的建功立业的人生际遇,也

领导班子运行情况报告范文6篇

领导班子运行情况报告范文6篇领导班子运行情况报告范文篇1对x外墙、屋檐瓷砖脱落或渗水的地方进行了全面排查与修复,保障了小区居民的正常生活秩序。下面是天涯涛源

全面从严治党和党风廉政建设5篇

全面从严治党和党风廉政建设5篇全面从严治党和党风廉政建设篇1按照局党组关于全面从严治党和党风廉政建设工作的各项要求,严格执行“三严三实”各项要求,坚决从点滴

组织生活会存在问题原因分析及整改措施10篇

组织生活会存在问题原因分析及整改措施10篇组织生活会存在问题原因分析及整改措施篇1根据区纪委、区委组织部相关文件精神,区委党校组织召开2017年度机关支部组

“听党话、感党恩、跟党走”宣讲素材7篇

“听党话、感党恩、跟党走”宣讲素材7篇“听党话、感党恩、跟党走”宣讲素材篇1根据县委宣传部《关于在全县开展&ldquo;学习贯彻省委十三届七次全会精神、奋力

2022保密工作会议记录内容5篇

2022保密工作会议记录内容5篇2022保密工作会议记录内容篇1本次培训生动形象地介绍了与日常工作生活息息相关的窃密技术和泄密案例,给人以深深的震撼及反思。

纪委落实全面从严治党监督责任情况报告5篇

纪委落实全面从严治党监督责任情况报告5篇纪委落实全面从严治党监督责任情况报告篇1知民意、解民忧、帮民难、促民富、得民心。下面是众鑫文档网小编为您推荐县纪委书

新时期产业工人队伍建设改革工作总结8篇

新时期产业工人队伍建设改革工作总结8篇新时期产业工人队伍建设改革工作总结篇1在全院深入开展干部作风整顿活动,提出以“四个着力”深化整治措施,力促落实整改,筑

2020纪检干部警示教育心得感悟【5篇】

2020纪检干部警示教育心得感悟五篇  严以修身、严以用权、严以律己,谋事要实、创业要实、做人要实&

2023年悲观与乐观议论文五篇(范文推荐)

悲观与乐观议论文1  人生来有就不同种的心态,主观上客观上的都是不同的感受。遇到问题时所产生的观念也不同。任何苦难都是在所难免的,最重要的是看自己怎么...