Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1256184
  • 博文数量: 548
  • 博客积分: 7597
  • 博客等级: 少将
  • 技术积分: 4224
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-15 13:21
个人简介

嵌入式软件工程师&&太极拳

文章分类

全部博文(548)

文章存档

2014年(10)

2013年(76)

2012年(175)

2011年(287)

分类: LINUX

2011-03-07 00:21:01

 

  1. ================================================
  2. 第1天

  3. 1. 程序 = 数据(静态特性) + 算法(动态特性)

  4. 2. 面向对象编程思想的3大特征:多态(Polymorphism),封装(Encapsulation),继承(Inheritance)
  5.    对象
  6.    类
  7.    抽象
  8.    继承性:继承重用现有类生成新类。
  9.            超类:有其他类继承其行为的类。
  10.         子类:继承其他类的类。
  11.    封装:允许有选择地隐藏类中的属性和方法的过程。
  12.    可重用性:        
  13.    多态性

  14. 3. C++中的保留字
  15.     class                    //定义一个类

  16.     friend                    //友元

  17.     virtual
  18.     inline
  19.     private
  20.     public
  21.     protected
  22.     const
  23.     this
  24.     new                        //调用构造函数(类似malloc),符号重载

  25.     delete                    //调用析构函数(类似free)

  26.     operator

  27. 4. C++和c语言的差异:
  28.         (1) gcc 1.c                        //c语言编译

  29.             g++ 1.cpp                    //c++编译

  30.         (2) C++中可以在for语句中定义变量
  31.         (3) C++中可以省略struct关键字
  32.         (4) C++中定义变量时,可以用"()"初始化。如: int i(36);
  33.         (5) C++中在堆中分配空间。如: int *p = new int;
  34.             对应的销毁:delete p;
  35.         (6) C++中在堆中分配23个int型空间。如: p = new int[23];
  36.             对应的销毁:delete [] p;    //释放空间:默认调用析构函数

  37.         (7) p = new int(25);            //可以分配的同时,给*p初始化

  38.             printf("*p = %d\n", *p);
  39.         (8) char ** c = new char * [10];    //给c一级分配char *类型的10个成员空间

  40.             c[1] = new char[100];
  41.             delete [] c[1];
  42.             delete [] c;
  43.         (9) 定义函数:c++的函数名可以重名(重载),只要形参的类型或个数不同即可
  44.             函数名相同,形参类型和个数相同,但是返回值或函数内部实现不同,不能重载
  45.         (10) c++可以在函数声明或实现时,给形参预置值,形参预置值必须从左往右,但是在函数的声明和定义时,只能有一个设置预置值    
  46.         (11) 内联函数:inline int max(int a, int b);        //在编译时展开,运行时存在内存中,形参为a++时a只加一次(没有函数的压栈,退栈的耗时操作,但是编译后代码量会增加)

  47.              预处理:#define MAX(a, b) ((a) > (b) ? (a) : (b))
  48.         (12) c++的函数可以直接传引用,用引用接收a和b,a不是实参的副本,而是a本身,定义类型时叫引用,'&''='右边为取地址符。
  49.             定义一个引用,就是将引用右边的值,做一个标签(如:int &a = b;)
  50.             '&'当在定义语句中并且在'='左边时才为引用,'='右边和非定义语句的'='的左边为取地址符。
  51.                 void swap(int &a, int &b)
  52.                 {
  53.                     int temp = a;
  54.                     a = b;
  55.                     b = temp;
  56.                     *(a - 2) = 34567;    //错误

  57.                     *(&a - 2) = 34567;    //可以改掉c

  58.                 }
  59.         (13) c++中调用c语言编写的函数:
  60.                 extern "C" {        //表示当前文件调用test是用c语言的命名规则

  61.                     extern int test(int, int);
  62.                 };    
  63.         (14) c中调用c++:
  64.                 g++ -c lib.o lib.cpp
  65.                 g++ -c temp.o temp.cpp
  66.                 g++ -fpic -shared -o libmy.so lib.o temp.o //将lib.o

  67.                 gcc 1.c -lmy -L .
  68.                 export LD_LIBRARY_PATH=.            //(1)将查找动态库的路径增加当前路径, (2)vim /etc/ld.so.conf


  69. 5. 增加动态库路径的方法:
  70.     (1) export LD_LIBRARY_PATH=.            //在查找动态库的路径中增加当前路径

  71.     (2) vim /etc/ld.so.conf                    //修改配置文件

  72.     (3)    mv libmy.so /usr/include             //添加到默认动态库


  73. 6. 基本输入输出流:c++将输入和输出看作字节流
  74.         #include <iostream>
  75.         cin            标准输入流
  76.         cout        标准输出流
  77.         cerr        标准错误流(非缓冲)
  78.         clog        标准错误流(缓冲)
  79.         flush        刷新输出缓冲区
  80.    格式化输出:
  81.            width(),setw(int w)                设置输出的字段宽度(默认为0)
  82.         fill()                            设置填充字符,默认是空格
  83.         setiosflags::right,setiosflags::left        设置左右对齐
  84.         setiosflags(ios::fixed);        用定点方式表示实数
  85.         setiosflags(ios::scientific);    设置为指数
  86.         precision(),setprecision(int d)    将精度位数设置为d,默认为6
  87.         hex,oct,dec                        16进制,8进制,10进制
  88.         write(char *, int);                输出字符串
  89.         put(char c);                    输出字符
  90.         read                            无格式读取一串字符
  91.         get(var, 10, '\n')                输入字符超过10个只接收10个,小于10个的以'\n'为分隔
  92.         getline
  93.     -----------------------------------------------
  94.     //#include

  95.     //.h 98标准化以前的头文件, cout是ostream下的一个全局的对象。

  96.     #include <iostream>            //98标准化之后的头文件,cout是std名字空间中的一个对象。

  97.     using namespace std;        //设定全局的作用域(名字空间的作用域)

  98.     //stdio.h    =>    98标准化后更改为cstdio

  99.     std::cout << "hello world!\n";    
  100.     std::cout << "hello" << " world!" << std::endl;            //endl == \n

  101.     -----------------------------------------------
  102.     cout << 'a' << 'b' << 'c' << 'd' << endl;    
  103.     cout.put('a').put('b').put('c').put('d').put('\n');
  104.     -----------------------------------------------
  105.     cin.read(var, 9);                //只能接收8个,

  106.     cout.write(var, 9);    
  107.     ----------------------------------------------
  108.     cin.getline(var, 10, '\n');
  109.     cin.get();                            //接收上面的超过10个后的空格

  110.     ---------------------------------------------

  111. 7. c++的man手册存放路径:/usr/share/man/man3/

  112. 8. 类和对象
  113.     类:定义数据的类型及操作这些数据的函数
  114.     对象:类的实例
  115.     成员:类中的变量和函数

  116.     类不能在定义时,初始化
  117.     类内部实现的方法,他会自动被转换成内联函数

  118.     sizeof(对象)--是类中所有成员变量的大小,private,public遵循字节对齐

  119.     成员名和方法名不能重名

  120.     this是一个指针,指向对象本身

  121. 9. 对象的初始化:(构造函数和析构函数)
  122.     构造函数的功能:在实例化对象时给对象分配内存空间,并可使用给定值来初始化对象
  123.         构造函数可以重载
  124.     拷贝初始化构造函数:利用一个已知的对象,实例化一个新的对象
  125.     析构函数的功能:用来释放一个对象的已分配空间,并可在对象被清除前,完成一些清理工作。
  126.         析构函数前加"~",并且不能有形参
  127.     一个对象可以有多个构造函数
  128.     构造函数名必须跟类名一样,并且没有返回类型
  129.     默认构造函数是不带任何参数的构造函数

  130.     
  131. 10.
  132.     ----------------------------------
  133.     void func(void) const                //const表示在函数func中不能修改值

  134.     {
  135.         a++;
  136.     }
  137.     ----------------------------------

  138. 11. 结构体和函数中局部变量的地址顺序:
  139.     struct stu {
  140.         int a;                //a在低地址

  141.         int b;                //b在中地址

  142.         char c;                //c在高地址

  143.     };
  144.     int main(void)
  145.     {
  146.         int a;                 //在栈的高地址

  147.         int b;                //在栈的中地址

  148.         char c;                //在栈的低地址

  149.     }

  150. =================================================
  151. 第2天

  152. 1. 操作符重载:把符号当作函数来使用
  153.     | 流操作符:        <<    和    >>
  154.     | 赋值操作符    =
  155.     | 下标运算符    []

  156. ================================================
  157. 第3天
  158. 1. g + f         //跳到头文件

  159.    ctl + o        //返回源文件


  160. 1. 继承






  161. 第4章    类与对象

  162. =================================================
  163. 类的概念:
  164.     |在现实中,类是一组客观对象的抽象,它将该组对象所具有的共同特征(包括属性和服务)封装起来,以说明该组对象的能力和性质。
  165.     | 在系统中,(class)是一种用户自定义的数据类型。通过类使得现实中的抽象实体在程序中直接表示为一个标识符,并可以进行引用和操作。

  166. 类的术语:
  167.     | 对象:类的实例。
  168.     | 成员:类中的变量和函数。

  169. 类中成员的公有和私有性:
  170.     | private(私有部分)
  171.         1.无法从类的外部访问私有数据
  172.         2.其他类的私有数据对于当前类也是隐藏的
  173.     | public(公有部分):构成类的接口(公有部分的成员可以被该类外部的函数访问)

  174. 类定义的格式:分为说明部分和实现部分
  175.     1.说明部分:包括数据成员和成员函数(也称为"方法")的说明。
  176.                 成员函数是对数据成员进行操作的。
  177.      格式:
  178.              class 类类型名{
  179.                     private:
  180.                             私有成员说明
  181.                     public:
  182.                             公有成员说明
  183.             };
  184.      实例:
  185.              class CPerson {
  186.                     private:
  187.                         char name[10];
  188.                         int age;
  189.                         char ***;
  190.                     public:
  191.                         void print();
  192.             };
  193.     2.实现部分:用来对成员函数进行定义。
  194.      (1)类说明外部定义成员函数,注意需要使用作用域限定符::指明是哪个类中的成员函数。
  195.           格式:
  196.               函数返回类型 类名::成员函数名(参数表)
  197.              {
  198.                  函数体;
  199.              }
  200.          实例:
  201.               void CPerson::print()
  202.              {
  203.                  cout << name << age << *** << endl;
  204.              }
  205.      (2)内联函数:语句只有1~5行,可以在类中定义(实现)成员函数,成为内联成员函数。
  206.           实例:
  207.              class CDate {
  208.                 public:
  209.                     void Set(int m, int d, int y)        //设置日期值

  210.                     {
  211.                         month = m;
  212.                         day = d;
  213.                         year = y;
  214.                     }
  215.                     void Print();        //打印输出

  216.                 private:
  217.                     int month;
  218.                     int day;
  219.                     int year;
  220.             };

  221. 类定义的注意事项:
  222.     | 1. 在类体中不允许对所定义的数据成员进行初始化。
  223.     | 2. 类中数据成员的类型可以为任意的。
  224.     | 3. 习惯上将类的定义代码放在头文件中。
  225.     | 4. 成员名与方法名(函数名)不能重名。

  226. ==============================================

  227. 对象定义格式:
  228.     | 定义了一个类只是定义了一种类型,它并不分配空间,不能进行操作。
  229.     | 用类创建对象后,系统才为对象分配存储空间。
  230.     | 类可以用sizeof()来求大小。
  231.     | 对象定义格式:
  232.          类类型名 对象名表;
  233.         
  234. 对象成员的表示方法:
  235.     | 通过对象可以访问类中的公有类型数据和成员函数。
  236.             对象名.成员函数名;
  237.             对象名.数据成员;
  238.     | 通过指向类类型对象的指针访问类的公有数据成员和成员函数。
  239.             指针名->数据成员;
  240.             指针名->成员函数;
  241.     | 注意:在成员函数中访问成员无须加对象名来作前缀

  242. this指针:是一个对象指针,指向对象本身
  243.         用于成员函数区分调用的成员来自哪个对象。
  244.     CDate::Set(int m, int d, int y); <====> CDate::Set(CDate *this, int m, int d, int y);

  245. new:动态创建对象,它在分配空间后,自动调用对象构造函数。
  246. delete:显式销毁由new创建的对象。
  247.     实例:
  248.         int *ptr;
  249.         ptr = new int[100];
  250.         delete [] ptr;

  251. ==============================================
  252. 对象的初始化:

  253. 构造函数:
  254.     1.功能:
  255.         在创建对象时给对象分配内存空间,并可使用给定值来初始化对象。
  256.     2.构造函数名必须跟类名一样,并且没有返回类型。
  257.     3.默认构造函数是不带任何参数的构造函数。
  258.     4.特点:
  259.         (1)程序中不能直接调用构造函数,在创建对象时系统自动调用构造函数
  260.         (2)构造函数可以重载。
  261.         (3)构造函数有隐含的返回值,并由系统内部使用

  262. 析构函数:
  263.     1.功能:
  264.         释放一个对象的已分配空间。并可在对象被清除前,完成一些清理工作。
  265.     2.在对象销毁时自动调用的成员函数
  266.     3.编译器会生成对析构函数的调用
  267.     4.与类同名,但是在函数名前有个波浪号(~)
  268.     5.析构函数没有返回类型,也不带参数
  269.     6.特点:
  270.         (1)一个类中只能定义一个析构函数
  271.         (2)析构函数可以被调用,也可系统调用
  272.         (3)被自动调用的两种情况:
  273.             i 在一个函数体内定义的对象,当函数结束时;
  274.             ii 在new动态创建的一个对象,在使用delete释放时

  275.     7.实例:
  276.         class Cusername {
  277.             public:
  278.                 ~Cusername();        //析构函数

  279.         };

  280. 缺省构造函数和析构函数:
  281.     1.在程序中定义一个对象而未指明初始化时
  282.     2.在一个类中未定义析构函数时,编译系统也生成一个缺省析构函数

  283. 拷贝初始化构造函数:使用已存在的同类型的对象来初始化正在创建的对象。
  284.     1.格式:
  285.         类名::拷贝初始化构造函数名(类名&引用名);
  286.     2.注意:每个类中必须有一个。
  287.     3.被自动调用的三种情况:
  288.      (1)是用一个已知对象初始化一个新对象时;
  289.      (2)是以值调用方式向一个函数传递对象参数时;
  290.      (3)当对象作为函数返回值时。
  291.     4.原则:如果对象有动态分配空间,一定要手动编写拷贝构造函数,自己在里面重新作内存拷贝。

  292. =================================================
  293. 类型的引用:
  294.     在一个类型后面加入&表示对类型实例的应用。
  295.     引用相对于原有类型的副本(和原对象的内容和地址完全相同)

  296. ================================================
  297. 静态数据
  298.     | 静态数据成员
  299.     | 静态成员函数

  300. 静态数据成员:
  301.     | c++的对象静态成员,为同一个类的所有对象共享。
  302.     | 只在类的内部可见
  303.     | 如果将静态成员声明为类的私有成员,则非成员函数不能访问它
  304.     | 不是对象的一部分,没有this指针
  305.     | 静态数据,不属于具体的对象
阅读(763) | 评论(0) | 转发(0) |
0

上一篇:arm体系

下一篇:qt&linux

给主人留下些什么吧!~~