iOS C++學(xué)習(xí)之路

從iOS開(kāi)發(fā)者的角度去學(xué)習(xí)c++ (本文Demo在Xcode編譯器)

c++ 和 oc 都是c的超集 都有面向?qū)ο蟮恼Z(yǔ)言特性 對(duì)于熟悉oc的開(kāi)發(fā)者來(lái)說(shuō) 從iOS開(kāi)發(fā)者角度去嘗試?yán)斫夂椭珠_(kāi)始學(xué)習(xí)C++

OC和 C++ 的差異比較

-在OC中你可以運(yùn)用技術(shù)手段拿到所在類(lèi)的所有方式函數(shù)和屬性 無(wú)論.h文件中是否暴露你都可以利用method swizzling去修改或獲得 本質(zhì)是因?yàn)镺C實(shí)在運(yùn)行時(shí)確定

-而在C++中 由于在編譯時(shí)確定 所以對(duì)作用域外的函數(shù)或成員變量成員函數(shù)進(jìn)行操作

文件差異

OC 和 C++ 都包含 h(hpp)和m(cpp)

-OC中

//GLOCPerson.h 文件
#import <Foundation/Foundation.h>

@interface GLOCPerson : NSObject

@end

//GLOCPerson.m
#import "GLOCPerson.h"

@implementation GLOCPerson

@end

-C++中

//GLPerson.hpp
#ifndef GLPerson_hpp
#define GLPerson_hpp

#include <stdio.h>

#endif /* GLPerson_hpp */


//GLPerson.cpp
#include "GLPerson.hpp"


在C++中的實(shí)現(xiàn)文件中什么都沒(méi)有,不需要像OC那樣@implementation和@end來(lái)開(kāi)始和結(jié)束
在OC中我們導(dǎo)入頭文件通常#import xxx 這樣編譯器可以放置頭文件重復(fù)導(dǎo)入 而在C++中使用#include 頭文件是否重復(fù)導(dǎo)入需要開(kāi)發(fā)者自己檢查

成員變量和成員函數(shù)

對(duì)于成員變量我們可以在實(shí)現(xiàn)文件中定義(.m) 這樣對(duì)于外界而言相當(dāng)于私有成員變量(通過(guò)runtime手段獲得就另說(shuō)了)相當(dāng)于C++的private
如果在.h文件中定義的話相當(dāng)于任何其他的類(lèi)都能訪問(wèn) 相當(dāng)于C++的public

-OC中

#import "GLOCPerson.h"

@interface GLOCPerson ()
@property (nonatomic,strong)NSString*name;
@property (nonatomic,assign)NSInteger age;
@end
@implementation GLOCPerson

-(NSInteger)myAge:(NSInteger)age{
    return 0;
}

@end

-C++中

#ifndef GLPerson_hpp
#define GLPerson_hpp

#include <stdio.h>
#include <string>
class GLPerson {
private:
    std::string name;
    int age;
    
public:
    std::string name1;
    int age1;
    
    int myAge(int age);
    
};
#endif /* GLPerson_hpp */
需要注意的std::string name;是在OC中沒(méi)有重命名空間這個(gè)概念 在不同的類(lèi)中是允許相同的函數(shù)的
但在C++中為了解決命名沖突的事件會(huì)利用雙冒號(hào)來(lái)表示 看下面的
namespace MyNamespace {

    class GLPerson { … };

}

namespace LibraryNamespace {

    class GLPerson { … };

}


//MyNamespace:: GLPerson pOne;

//LibraryNamespace:: GLPerson pTwo;


這樣加上前綴區(qū)分了不同的類(lèi)

在oc調(diào)用函數(shù)以及方法

#import "ViewController.h"
#include "GLPerson.hpp"
#include <iostream>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    GLPerson cPlusPerson;
    cPlusPerson.name1 = "123";
    cPlusPerson.age1 = 12;
//    NSLog(@"%@   %d",cPlusPerson.name1,cPlusPerson.age1);
    std::cout<< "Lefe_x age is " << cPlusPerson.name1 << cPlusPerson.age1 << std::endl;
    
    // Do any additional setup after loading the view.
}

需要注意的是oc和c++混編需要將.m修改為.mm

運(yùn)行工程看下打印信息


截屏2021-02-10 上午11.25.02.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 第一章 計(jì)算機(jī)與C++編程簡(jiǎn)介 C++程序6個(gè)階段編程 ->預(yù)處理->編譯->連接->裝入->執(zhí)行1.程序在編譯器...
    rogertan30閱讀 4,508評(píng)論 0 1
  • ++ 概述 ++目前來(lái)說(shuō),Objective-C(簡(jiǎn)稱(chēng)OC)是iOS開(kāi)發(fā)的核心語(yǔ)言,在開(kāi)發(fā)過(guò)程中也會(huì)配合著使用C語(yǔ)...
    南山伐木閱讀 4,112評(píng)論 2 4
  • ^函數(shù)重載的匹配: 當(dāng)函數(shù)名被重載后,函數(shù)的匹配過(guò)程:首先尋找能精確匹配的函數(shù),如果未能精確匹配,則嘗試...
    魯大帥閱讀 1,142評(píng)論 0 1
  • 前言 上一篇主要復(fù)習(xí)了實(shí)例變量,這篇文章還依然按自己掌握的java的知識(shí)體系來(lái)進(jìn)行oc的復(fù)習(xí),本篇主要復(fù)習(xí)oc中的...
    yangzheng216閱讀 1,195評(píng)論 0 0
  • 推薦指數(shù): 6.0 書(shū)籍主旨關(guān)鍵詞:特權(quán)、焦點(diǎn)、注意力、語(yǔ)言聯(lián)想、情景聯(lián)想 觀點(diǎn): 1.統(tǒng)計(jì)學(xué)現(xiàn)在叫數(shù)據(jù)分析,社會(huì)...
    Jenaral閱讀 5,982評(píng)論 0 5

友情鏈接更多精彩內(nèi)容