添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
extern "C" void func1() { // 此函数将以C语言形式编译 void func1(int a) { // 在cpp中仍可将函数重载,但是不可将重载函数也声明成C函数 // .c void func1(); // 正常声明 void func2() { func1(); // 可以调用.cpp中的函数 #include // 包含了STL对std::abs(T num)的定义 void func2() { int a = std::abs(4); // 可以传整型 double b = std::abs(7.5); // 也可以传浮点型
#import <Foundation/Foundation.h>
#import <iostream> // 可以使用import来包含STL库头文件,但是此时不能自动处理重复包含,效果与include完全相同
class CppClass; // C++类按照C++类的声明来书写,所以这里不能写作@class,如果是声明OC类则需要写@class
@interface OCClass : NSObject /*不能让OCClass继承自std::string等C++类*/ {
    CppClass *_cp; // 成员中可以定义指向C++对象的指针,但不能直接定义C++对象,并且该指针不能通过@property来自动生成getter和setter,需要手动书写
@property int men1;
- (void)show;
class CppClass {
public:
    int men;
    OCClass *op; // 这里也可以定义指向OC对象的指针
    CppClass(int men):men(men) { // 指向OC对象的指针无法写入初始化列表,因此不能将该指针声明为const成员
        op = [[OCClass alloc] init]; // 只能在函数体中来初始化
    friend std::ostream &operator <<(std::ostream &stream, CppClass &temp) {
        NSLog(@"%d\t%@", temp.men, temp.op); // 可以调用Cocoa框架中的方法,但传参时只能传OC对象以及C语言的数据类型,不可以将C++对象(例如std::string)传入OC函数
        return stream;
@implementation OCClass
- (NSString *)description {
    return [NSString stringWithFormat:@"%d", self.men1];
- (instancetype)init {
    if (self = [super init]) {
        _cp = new CppClass(1); // 由于不能定义成员对象,只能定义指针,因此需要在初始化方法中使用new来创建C++对象
    return self;
				
注意事项: OC与C++对象在内存管理上是不一样的。所以我们无法直接将一个OC对象直接赋值给一个C++对象,或者相反。 OC与C++都支持指针,可以通过指针进行桥接。例如在一个C++类中声名一个OC的指针。 clang可以通过程序文件的后缀名选择不同的译器对其进行译。如文件后缀名是.m,它会使用OC译器;如果是.mm,它会使用Object-C++译器。 OC调用C语言: // 方法一:c语言可以直接在OC的类中写方法: - (void)playvideobtn{ // 调用c语言方法: 最近要帮忙做一个SDK,主体功能已经实现,是用C/C++写的,所以导入这个SDK库到新项目中,程序需要有以下设置才能不会报错: 项目-Targets-Build Settings Apple LLVM 6.0 -Language-Compile Sources AS: C++ Language Dialect 和 C++ Standard Library 这么做后,.a静态库文...
参考《深度探索C++对象模型》 从C++转向Objective-C Objective-C中没有多重继承、命名空间、运算符重载、模板、类变量、抽象类、STL等结构。但是Objective-C提供了相似的结构。 Objective-C没有C++中的构造函数、拷贝构造和析构函数是最明智的!当然
看到题目,我相信一定有很多人觉得,嗯,我确确实实是个逗比。各种权威资料上写得非常清楚,C语言是面向过程的语言,C++,Java,OC,Python,JS等这些才是面向对象的语言。这个逗比,竟然觉得C可以面向对象,看来他真的是个逗比。 所以我在此先声明一下我起这个标题,以及,写这个系列文章的初衷。我并不是挑战权威,说C是面向对象的语言。确实,C的确是面向过程的语言,其中并没有包括任...
在这篇文章里, 您可以学习到: 数据结构简介数据结构的逻辑结构和物理结构队列OC和C++在Xcode中的泛型程思想泛型程实现循环队列和链表队列博客中使用的图片均来自网络 一.数据结构简介 数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检
大家好!逗比老师又来给大家逗比啦!今天我们来逗比的内容,是C++中特别特别特别**疼的内容,这部分内容尤其对于C程序员、OC程序员来说尤为费解。那么废话不多说,我们先来进入第一个内容——命名空间。 先问你个问题哈,你是不是在写C++代码的候,脊髓反射式的写一个using namespce std; 但其实你并不了解这句话什么意思?哈哈,如果你中枪了,那么你就更需要好好把它搞清楚了。
Hello,大家好啊!逗比老师又来给大家逗比啦!今天咱们逗比的内容,就来围绕一个比较棘手的问题——匿名函数。我有一个朋友在学习做iOS开发,他最近就在被这个Block缠绕弥漫,感觉云里雾里,所以希望我来详细讲解一下相关的内容。相信不止他一个,遇到此类问题的人一定不占少数,所以,今天逗比老师就来给大家分享一下这个部分我个人的详细见解。 我们先把视野拉回到C语言中。在C语言中定义一个函数,相信是一件...
C++的type_traits是一套纯粹译期的逻辑,可以进行一些类型判断、分支选择等,主要用于模板程。使用type_traits并不难,但是我们希望能够更加深入了解其实现方式,与此同,可以更进一步体验C++的模板程。 本篇文章旨在引导大家自行实现type_traits的基础代码。 模板程不像常规的代码,可以有if-else这些流控制语句,我们需要充分利用模板、模板特例、类型转换等特性来实现译期的一系列判断和类型转换。 定义基础常量 第一步,我们需要定义true和false两个常量,所有的type
C++17之std::apply与std::make_from_tuple C++17中有两个有意思的语法,是关于std::tuple(或std::pair、std::array等)与函数参数转化的问题的。今天这篇文章我们来研究一下。 std::apply std::apply最主要的作用就是把tuple转化为函数参数,然后去调用函数。请看例子: #include <iostream> int sum(int a, int b, int c) { return a + b + c; 我们知道,std::vector之所以可以动态扩容,同还可以保持顺序存储,主要取决于其扩容复制的机制。当容量满,会重新划分一片更大的内存区域,然后将所有的元素拷贝过去。 但是笔者却发现了一个奇怪的现象,std::vector扩容,对其中的元素竟然进行的是深复制。请看示例代码: #include <iostream> #include <vector> struct Test { Test() {std::cout << "Test" <<
    在给出解决方案之前,我一定要好好吐槽吐槽,网上对于原生态的macOS开发的资料实在实在是太少了,关于这方面的问题在网上怎么搜都搜不出来,唯一的参考资料就是苹果开发者官网,但是对于我们大多数英语不是很好的开发者来说,阅读起来难度太大,而且,针对一些配置之类很细节的问题,在上面又没办法定位到,因为它只给出的是每个模块如何使用,却没有给出在什么样的场景下遇到什么样的问题应该如何解决。
这取决于您要使用它来做什么。C++是一种非常强大的通用语言,适用于系统级和应用级开发。C#是微软的语言,主要用于桌面和移动应用程序开发。C是一种通用语言,适用于系统级开发和嵌入式系统。Objective-C是苹果的语言,主要用于iOS和macOS应用程序开发。 需要根据需求来选择适用的语言,如果是系统级程序,C++是一个很好的选择,如果是macOS或者IOS程序,Objective-C是一个很好的选择,如果是微软平台程序,C# 是一个很好的选择.