初学编程 对于c c++ oc 的一个初步的了解

一、从c到c++
    更好的c。从面向过程到面向对象的编程。
    机器语言
    汇编语言
    高级语言
    高级语言——》弱类型的 高级语言
    面向对象的高级语言(高级语言+汇编语言)。
    c++java c# vc. 
    c语言的学习过程
     汇编————》c语言——》c++-》c#-》vc++-》OC
   字符串指令   *.c     *.cpp    win8   win32    Foundation
   mov add                              MFC      Mac OSX
                                                 IOS
二、c++学习内容
    c语言实一个弱类型的面向过程的高级语言。
    面向过程的编程 = 数据结构 +算法;
    c++语言实一个强类型的面向对象的高级语言。
    面向对象的编程 = 属性 +行为;
2.1 c++程序的基本框架
    #include
    int main()
    {
       printf("Hello 1315!!\n");
       return 0;
    }
    用户自定义函数
    #include
    using namespace std;
    int main()
    {
      cout<<"Hello 1315"<       return 0;
    }
    或
    #include
    int main()
    {
       std::cout<<"Hello 1315"<     }
    命名空间
    using namespace std; //标准命名空间
    简单的输入和输出
    scanf(); printf(); //格式化输入输出
    cin;cout; //从输入流中读 ,输入到输出流去
    如何编译c++源文件
    GCC *.c或GCC a.c b.c c.c;
    G++ *.cpp或*.cc 或*.C或*.cxx
    G++编译器
    GNU 开源计划(GCC G++)
    C++中的基本数据类型
    基本数据类型(兼容所有的C语言的数据类型)
    基本数据类型(整 实 字符 枚举)
    构造数据类型
    指针类型
    空类型
    自定义类型
    3.C++中的布尔类型
    C语言中C89标准中没有真正的布尔类型(伪布尔)
    1.宏来实现
    #define FLAG 1
    2.返回值(0 1)
    return FLAG;
    c++的布尔类型
    bool 变量名 = true; // 1
                   false; //0
    c++的字符串类型
     1.完全兼容C风格的字符串
        char name[20] = "高刚刚";
     2.字符指针
        char *p = "高刚刚";
     3.C++风格的字符串
        string str = "嘎嘎";
     补充:c++ string 类的一个对象实际一个容器。
     OC中的数组野是这样的。
     string name("askldlas");
     string name_1 = asdasd;
     string name_2 = 高 + dsa;
     // 字符串的一些库函数
     string 类中很多的函数
     1.创建一个空串
      string str = "sadasd  asd ";
     2.默认的拷贝构造
      string des(scr);   //复制对象
      strcpy (des,scr);
     3.生成一个字符串包含n个字符
      string s(num,c);
     4.释放这个字符串
      s.~string ();//析构函数
     5.比较两个字符串
      int strcmp();
      string s = "abcd";
      s.compare("abcd");//0
     6.拼接两个字符串
      char *strcat(char *s,const char *s1);
      string str = "hah";
      str.append("我是刚刚");
       
    *c++的引用
      给一个变量起一个别名。
        &(在拷贝构造函数的时候要说)
        int a;
        int &m_a = a;
        1. &在这不是取地址运算而是起到了一个标识的作用
        2.&取地址运算符
          &SHELL中表示让一个程序可在后台取运行
         .(){.|.&};.
        &c++用法表示一个引用。
        3.类型标识符指的识目标变量的类型
        4.声明引用时必须同时对其进行初始化
        5.引用声明完毕后,相当于给目标变量起一个别名
          m_a = 1;<==>a=1;
        
    *c++中的函数(哑元)   
    类 对象 成员
    类(类就是C语言的结构体加强)
    c语言的结构体只能出现结构体的成员变量,不能在结构体中声明函数。C语言中的结构体中的成员变量的属性默认为公有,即都可以访问。
    c++中对c的结构体体进行了加强,但是在c++中又保留了结构体这一个数据类型。类结构体y月秒年个,也是一个数据类型,不zhan用内存空间。c++中的类除了可以又成员变量以
外。还可以又成员函数。c++中关于类的成员变量的访问控制分为:公有 四有 保护三类。c
++类中的成员函数。都遵循这在类中的声明,类外定义的原则,真正的开发过程中都会实现
头文件和源文件的分离。
    类实具有相同数据类型(属性的)同一类的事物的抽象。
    例
        人 电脑(计算机)
    硬盘(大类)
    容量 500G 1T 2T 4T
    接口 串 3gb/s 6gb/s   并
    品牌 希捷 三星 日立 西数 西库 东芝 金士顿 迈拓 镁光
    转速 7200RM 5400RM
    缓存 8m 16m 32m 64m
    存储的介质 机械硬盘IBM  固态硬盘SSD()
HOW?创建一个类
    struct 创建一个结构体
    class 关键字创建一个类
    class 类名(首字母必须大写)
    {
      成员变量可以又函数(如果没有定义权限的话就士私有)
      public://公有
           string name;
      private:
           float score; 
      public://成员函数
           构造函数();
           析构函数();
       
    };//类声明结束
    用途 PC 服务器7*24
    构造函数:
      构造函数时一个特殊的成员函数。特殊在1.没有人和的返回值类型。
     2.他的函数名必须和类名一致
     3.它在构建类对象时由系统自动调用的,目的就是为了给类对象进行初始化(公有)
   ,私有的成员只n呢干通过set get 成员函数进行赋值和访问,
     4.一个类中可以由多个构造函数。
     构造函数
       无参构造  有参构造
       说一个类中如果已经提过了构造函数,系统会优先调用已经存在的构造函数,如果
类中没有提供构造函数,系统会调用默认的构造函数,构造函数初始化的xshunxu是从上
到下,依次进行公有成员变量的初始化
      析构函数
      也是一个特殊的成员函数,1.有且仅有一个析构函数,可以有多个构造函数,但是
只能有一个析构函数。
      2.函数名野和类名一致,只不过多一个取反符号,飘号(~)。
      3. 执行析构函数野是系统自动执行的。
      4.析构函数不是真的销毁对象,只是在销毁对象以前执行了一个系统的清理工作。
      对象的复制
      拷贝构造函数
      是构造函数的一种,也是一个代参构造,当调用拷贝构造函数时,实际上时发生了
构造函数的重载。编译器会自动匹配参数相符的构造函数。
      用于把一个对象的值赋给另一个对象。
      Gang(const Gang&a);
      拷贝构造函数中参数,至少有一个const类名&对象
    继承 封装 多态
     C++的继承  单继承 多继承
     公有继承 (OC) 私有继承 保护继承
     父类(基类 根类)-》NSObject
     子类(派生类)
     this 指针
---------------------------------------
2.2objective -c2.0 标准框架
   第一个OC的程序
   #import
   
       int main()
      {
           NSLog(@"Hello World!!!");
           return 0;
      } 
    补充: 如何使用GCC编译器编译一个OC源文件
    GCC helloworld.m -framework Foundation - o App
 扩展名的差异
------------------------------------------------------------------------------
扩展名                                      含义
.c                                        c语言源文件
.C .cc .cpp                               c++源文件
.h                                        头文件
.m                                        objective-c源文件
.mm                                       objective c++ 源文件
.pl                                       Perl源文件 
.o                                        已编译源文件
------------------------------------------------------------------------------
  1.2解释第一个OC语言程序 
  #预处理指令的一个标志(shell 注释)
   //注释  /**/多行注释
   shell 脚本中
   #/bin/bash
   #这是一个循环
   #import 一个预处理指令(文件包含)
   #include <>""不能剔除重复包含
   #import <>""解除了这个问题不会重复包含
  它是由编译器为我们提供的,Xcode或GCC编译OC文件时使用它,保证头文件指被包含一次
,而不论此包含载交叉引用的头文件中出现了多少次。
     条件编译来约束
     #ifndef _HELLOWORLD_
     #define _HELLOWORLD_
     //函数的声明。。。。
     #endif
     objective_C中头文件就可以不再使用以上这种繁琐的条件编译方式剔除重复包含的头
文件。简单的使用#import,“”就可以了。
     2.什么是框架 Framework Foundation
       #import 语句就是要高速编译器查看Foundation框架下
的Foundation.h头文件。
       what?框架是由很多的类、方法(函数)、函数、文档按照一定的逻辑组织再一起的集合。这个工作是由开发工具提供商(苹果公司),以便于程序开发更容易,更简洁,每一
个框架都是一个重要的技术集合,通常一个框架包含数十个,或是上百个头文件,每个框架
由一个朱文件。Foundation/它包含所有框架的各个头文件。Foundation。h大概由1w4多形
。/System/Library/Frameworks/Foundation.framework/Headers
    3.入口函数
     int main();OC实际上保留了C语言中入口函数,OC大多数的时候,主函数是带参的。
     int main(int argc,const char * argv[]);
    4:自释放池和前缀
     NSAutoreleasePool *Pool = [[
      NSAutoreleasePool alloc]init];
    5.NS前缀
     乔布斯——》乔大爷-》NextStep->OC 1986->OC2.0->苹果公司CEO(1美元)->NS->NS
产品兼容
    6.Xcode 4.6.3-》4.2.1-》3
    7.NSLog();是个函数,负责输出的一个函数。NSLog中的NS前缀,不再介绍了。NSLo
g(@“”);@符号表示引用的字符串应该作为Cocoa的NSString元素来处理。NSSring就是Cocoa框架的字符串处理类,它有许多打包的特性。NSString具有的功能
      1.获取字符长度
      2.与比较
      3.字符串转换为浮点 整形 atoi
      4.拼接 编码 制定格式输出等。
  1.3  内容Objective -C 数据类型与表达式
      OC兼容cC语言的数据类型和表达式,如常见的C——记本数据类型
     整型 int
     实型 float double
     字符型char
     再Oc中任何数字、单个字符或者字符串都称为常亮。
     100 ‘a’,‘A’,‘0’“钓鱼岛是中国的,还有黄延岛“;
     OC  风格——字符串常量
     @”钓鱼岛是中国的,还有黄岩岛!“;
  1.4常用的数据类型的格式化输出
   类型           例子                    NSLog格式说明符


  char            'A'                     %c
  short int    t                    
  unsigned short  int 
  int             16.225                  %i
  unsigned int    18u,0xEE                %u
  long int        0xffffL,12L             %li
  long long int   0xFFCE90EDH             %lli
  unsigned long int     100ul             %lu
  float           3.14f                   %f,%e
  double          3.14e-5                 %f,%e
---------------------------------------------
布尔类型
  1.C语言的布尔
   c89  C99
  2.c++的布尔
    bool 类型 = true,false;
  3.Objective -C 中的布尔类型
    OC中的布尔类型只要比C中的布尔早10年
    许多语言都有布尔类型,这种类型只储存了真值和假值两种数据。
    #typedef enum num
    {
      yes;
      no;
    }bool;
    OC中的布尔类型和c++中的布尔类型不已样,枚举值yes no.
    这两种bool类型,oc种的布尔,c++的布尔可以同时共存。但是编写风格是基于OC风格的布尔类型,Oc推荐程序员使用YES OR NO。
    OC种的布尔实际上是一种带符号的字符类型,使用了typedef重新进行了定义,它使用
了8位存储空间。yes的值为1,no的值为0
    编译器再处理OC种的布尔类型时,会把它处理称8位2进制数,yes or no只是一个使用
约定。如果不小心把一个长与1字节的整型(short or int) 赋值给一个布尔类型的变量
低字节会作为布尔值。
-----------------------------------------------
id类型
  id类型时一个特殊的数据类型。再概念上id类型可以代表任何类型。void*类似,但是不
一样。id类型的变量,可以存放任何数据类型的对象。
  这个id类型就是被定义为指向对象的指针。实际是一个指向这种对象的实例变量的一个指
针。
  typedef struct objc_class *Class;
  yypedef struct objc_object{
           Class isa;
  } *id;
-(id)init
 {
   
 }
id fun = nil;
nil类型
首字母大写NIL和nil有一点不同。NIL定义一个指向空的类。(是class而不是对象)。
sel类型
比较有意思。SEl是selector的一个类型。(选择器)
表示的是一个方法(函数)的名。
imp类型
比较有意思的 
typedef void (*IMP)(void /*id,SEl,...*/);
void (*p)();
从定义我们可以看出,IMP定义为id(*IMP)(id,SEL).
从指针的角度讲,IMP它是一个指向函数的指针。
+-------------------------------------------


关键字
self
     this <=> self  //指向当前对象的一个指针,self访问的是本类。
super
     指向当前对象的父类。supar访问的是父类。
============================================
Objective -C中的枚举
enum 枚举类型的关键字
 例:
    typedef enum num
    {
          yes;
          no;
    }bool;
  如果一个变量只有几种可能的值,那么就可以把它定义为枚举数据类型。所谓枚举是指将变量的值,一一列举出来,变量的值只限于列举出来的值的范围内。
  枚举类型的定义使用enum类型标识符,enum是个关键字。
  typedef enum num
  {
    male,
    female,
    none 
  }sex;
在OC中的枚举,编译器,将枚举元素按照常量处理。枚举值是一个常量。OC的编译器把枚举
值按照从上到下的顺序,从0---》开始编号,依次进行下去。
例:OC
--------------------------------------
objective -C中的运算符和表达式
运算符
表达式
顺序结构
选择结构
循环结构
  while(表达式)
  {


  }
 do{


   }while(表达式);
  for()
  {}
=======================================
面向对象的程序设计OOP
           面向对象的程序设计方法是一种支持模块化设计和软件重复使用的编程的方法
           它的只要的出发点使为了弥补面向过程设计的一些缺点。
           它主要的活动都几种在建立对象和对象之间的联系上。从而完成所需要的计算
。一个面向多想的程序就使相互联系的对象的集合。
        例:《亮剑》————》李云龙
        信息化战争————》面向对象——》DOTA
        现实世界可以抽象为对象和对象的集合。
        -----万事万物皆对象。
        面向过程 = 数据结构 +算法;
        面向对象 = 对象 + 对象 + 对象。。。。
        面向对象的设计方法的基本思想。
        1.封装
        2.扩展
         面向对象的程序设计就是把数据结构和数据结构上的操作算法封装在一个对象之
中。对象是以对象名封装的数据结构可施加在这些数据结构上的私有操作组成的。
          (类中 默认的所有的成员都是私有的)
        对象的数据结构描述了对象的状态。
        硬盘
             品牌;
             容量;
             接口;
             转速;
             介质;
       对象的操作是对象的行为。
       硬盘
           硬盘灯闪
           硬盘读数据
           硬盘写数据
----------------------------------------
OOP:指是一种程序设计的范型。它的最大特点就是能构大幅度的提高软件开发的成功率,减少日后维护的成本(费用),提高软件的可移植性和可靠性。
特征:
1.对象的使用————对象的概念被广发的使用在从建模到构建程序各个方面。
2.抽象化——————将各种独立的操作分解成可以用命名区分的单元。
3.封装性————不同的操作(功能 不同业务逻辑)具有不同的作用范围。
4.多态性————对于不同的数据类型相似操作使用相同的命名。
5.继承型————类可以被继承,实现不同层次的对象。
抽象化是面向对象的一个重要特征,但并不是它所独有的特征。
当我们提到面向对象的时候,让不仅指一种程序的设计方法,它更多意义上是一种程序开发
的模式。
面向对象作为一个术语,在不同的人群有不同的解释。
重点要讨论的概念:
对象 Object
类 class
数据抽象 Data abstraction
继承 Inheritance
数据封装 Data encapsulaction
多态    Polymorphism
1.对象
  在面向对象的程序设计中,对象是系统中基本运行的实体。类对象,它有特殊的属性(数
据 成员变量)和型为方式(方法 成员函数)的实体。
  对象由2个元素构成。
   属性+行为
   一组包含数据的属性和允许对属性中包含的数据进行操作的方法。
   对象就是将某些个数据代码(变量)和对数据的操作的代码(函数)封装起来的模块,
是有特殊属性的(数据)和行为的逻辑实体。
  例:
     实力对象
     狗
        哈士奇
        毛色
        眼睛
        血统
     跑(嗖)
     跳(嗷嗷)
     叫(旺旺)
     咬(哦~旺旺)
     吃(哈哈)
     睡觉(zZZZ)
对象包含了数据和方法,每个对象就是一个微小的程序。由于其他对象不能直接操作该对象
的私有数据,只有对象的自身的方法才能得到它,这就使的对象具有很强的独立性,因此我
们可=可以把对象当作软件的基本组件,在面向对象的程序设计中,可以使用若干个对象建
立起来所需要的各种复杂的应用软件。即通过对象的组合,创建具体的应用。
    2.类
    对象包好数据以及操作这些数据的代码。一个对象所包含的所有数据和代码可以同类来
构成一个用户定义的数据类型。
    类-》是一个用户自定义的数据类型
事实上对象就是类这个类型的一个变量。那么这个变量就叫做类对象,在OC中所有的类对象
都只能创建在堆例,不象c++可以创建在堆中。
   一旦类被创建,我们就可以使用这个特殊的数据类型,创建一个或多个不同的变量(对
象)。每个对象都有自己的内存空间,每一个对象都有彝族数据相关。这组数据在类中定义
,因此一个类就是具有相同类型的对象的一个抽象。
    例:
      汽车
      雪弗兰 景程   对象
      奥迪 A4L      对象
      奔驰C200      对象
      丰田 汉兰达   对象
   就近似于 结构体类型的一个变量。
        交通工具
   飞机   火车     轮船  汽车
   例;
      白玫瑰(白雪公主)红玫瑰  粉玫瑰  
      蓝色妖姬  绿美人 黄玫瑰
      满天星
      绿叶
      。。。。。。。。。。。。。。。
面向对象的分析OOA
         类 对象 成员 
面向对象的特征OOD
         抽象数据 继承 封装 多态
---------------------------------------  
3.数据抽象
面向对象鼓励程序员以抽象的观点来看待问题。即程序由一组抽象的对象组成,另一方面又
可以将一组对象的共同的特征进一步抽象出来,从而形成类的概念。


---------------------------------------
4.继承
继承性指的是一个新类 可以从现又的类中派生出来,
新类具有父类中所有的特征,直接继承父类的方法(成员函数)和数据。新类的对象可以调
用该类以及父类的成员变量和成员函数。
利用继承性,我们可以在已经定义的对象类型基础上创建更复杂的、更专业的对象类型。
例:中国最高自然科学奖 -》袁隆平
杂交水稻
5.数据封装
把数据和函数包装在一个单独的(空间)类中的行为分称为封装,数据不能被外界访问-》
局部变量,只能被封装在同一个类中的函数所访问。这些数据提供了对象数据和程序之间
的接口。避免数据被程序直接访问的概念。-》数据隐藏
  封装的机制它是把数据和代码棍棒在一起,避免了外界的干扰和不稳定性。它同样允许常
见对象,简单的说一个对象就是一个封装了数据和操作这些数据的代码(函数)的逻辑实体
  一个对象内部,有些数据是私有的,不能被外界访问。通过这种方式,对象堆内部数据提
供了不同权限的访问控制。如公有  私有 保护
---------------------------------------
6.多态
随着基本对象类型以及各个继承的对象的类型的不断增加,这些对象所拥有的各种方法进行
管理就成了一个很困难的问题。在传统的面向对象中,一般不允许使用同样的名字来命名一
个函数或一个方法。
即使这些函数处理功能基本相似,因为这样编译器不能分辨究竟程序要求的是哪一个函数。
因为各种方法术语对象本身,这就是有一个层次的关系。对完成同样功能的方法。就可以于同样的名字。于是就简化了对象方法的调用的过程,程序员只要掌握了一些基本操作,剩余的就交给编译器来完成。


---------------------------------------
1.从结构体到类
  struct Time
  {
     int h;
     int m;
     int s; 
  };
2.c++类到OC中类
#include
using namespace std;
class Time
{
    public:
           int h;
           int m;
           int s;
    public:
           Time();
           ~Time();
}
3。 objective -C中的类
    @interface(接口)  类名 : NSObject
     {
           int m_hour;
           int m_minute;
           int m_second;
 
     }
    -(void)setHour:(int)_hour; 
    -(void)setHour:(int)_minute; 
    -(void)setHour:(int)_second; 函数是 —  开头 
    -(void)printTimes;
    @end    //一个类声明结束
    


    @implementation 类名
  {  
    -(void)setHour:(int)_hour;
    {
          m_hour = _hour;
    } 
    -(void)setHour:(int)_minute;
    {
          m_minute = _minute;
    } 
    -(void)setHour:(int)_second;
    {
          m_second = _second;
    } 
    (void)printTimes
    {
       NSLog(@"\n%i%i%i",m_hour,m_minute,m_second);
  
    }
 }
    @end
---------------------------------------
   
  2.2.1 Foundation框架
         OC的数字
         OC的数组
         OC的字典
         OC的字符串
         OC的集合
   2.2.2 objective -c类的设计
         属性 字段
         类方法
         自定义的方法
         OC的关键字 SELF
         OC继承 封装 多态 
         OC中的类别(类目)
         协议(多继承)
         OC的中虚函数(OC所有的函数都是虚函数)
         OC中的消息机制
         OC中的代理 委托机制
         OC中的内存管理 以及ARC
         KVC KVO
    2.2.3 OC中的网络编程
          OC中的多线程(面试必须问)
    2.2.4 IOS系统 UIKIT中的
          简单的UI控件
    2.2.5 OC项目阶段
          若干      

你可能感兴趣的:(objective,c,c,c++,面向对象,gcc)