OC学习之核心语法


一、点语法

用途:

OC当中通过@property和 @synthesize 配对使用来自动生成变量的set和get方法,通过使用点语法可以大大减少我们程序员代码量,也方便学习过其他语言的人上手OC语言

简而言之:

1.减少代码量

2.方便其他语言使用者阅读

用法:

编译器遇到点语法时,会自动展开成其相应的方法


二、@property                                                                                                          

@property可以自动生成某个成员变量的settergetter声明

比如:

.h文件中

?

三、@synthesize                                                                                                       

@synthesize可以在.m文件中自动生成settergetter的实现,并且会访问该成员变量

比如:

@synthesize  int  age = _age;   // 等号左边的age是@synthesize要实现的变量名
                             //  右边的_age是@synthesize要返回的变量名,就是要赋值的变量

?

如果@synthesize定义一个未知的变量,那么这个变量的默认就是@private类型的

Xcode4.4以后,其实只需要用@property这个关键字就行了,它会自动生成成员变量,会声明和实现getter和setter方法

其缺陷是自动生成的成员变量是@private,子类只能通过getersetter方法访问,但是可以手动改变成员变量的作用域



四、description                                                                                                          description默认返回的是 <类名:内存地址>

#import <Foundation/Foundation.h>
#import "Person.h"
int main()
{
    Person *p = [[Person alloc] init];
    p.age = 20;
    p.name = @"jack";
    NSLog(@"%@",p);
return 0;
}


?

此时输出的结果就是:person:内存地址

因为Nslog(@"%@",p);这句会调用pdescription方法,而方法默认返回的就是 <类名:内存地址>,所以想要返回自己想要的结果,可以在.m文件中修改description方法的返回值

#import "Person.h"
@implementation Person
- (NSString *)description
{
    return [NSString stringWithFormat:@"%d,%@",_age,_name];
}
@end


?

此时NSlog输出的就是年龄和名字了

五、SEL                                                                                                                     

每个方法都有一个和他相对应的SEL数据,每个SEL数据都相对应着这个方法的地址

也可以理解为SEL就是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法

方法调用的过程:

当调用方法的时候,编译器会把方法包装成SEL类型的数据,然后去类里找这个SEL数据相对应的方法的地址,找到之后就会调用这个方法

以上操作是有缓存的

其实调用方法还可以用SEL数据来调用

?

带参数的方法调用:

六、NOSLog补充

?

?

// 指针变量地址
    NSLog(@"%p",&p);
    // 对象地址
    NSLog(@"%p",p);
    // <类名:对象地址>
    NSLog(@"%@",p);


NSLog输出C语言字符的时候 不允许有中文

NSLog(@"%s",str);



资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 行列式是线性代数的核心概念,在求解线性方程组、分析矩阵特性以及几何计算中都极为关键。本教程将讲解如何用C++实现行列式的计算,重点在于如何输出分数形式的结果。 行列式定义如下:对于n阶方阵A=(a_ij),其行列式由主对角线元素的乘积,按行或列的奇偶性赋予正负号后求和得到,记作det(A)。例如,2×2矩阵的行列式为det(A)=a11×a22-a12×a21,而更高阶矩阵的行列式可通过Laplace展开或Sarrus规则递归计算。 在C++中实现行列式计算时,首先需定义矩阵类或结构体,用二维数组存储矩阵元素,并实现初始化、加法、乘法、转置等操作。为支持分数形式输出,需引入分数类,包含分子和分母两个整数,并提供与整数、浮点数的转换以及加、减、乘、除等运算。C++中可借助std::pair表示分数,或自定义结构体并重载运算符。 计算行列式的函数实现上,3×3及以下矩阵可直接按定义计算,更大矩阵可采用Laplace展开或高斯 - 约旦消元法。Laplace展开是沿某行或列展开,将矩阵分解为多个小矩阵的行列式乘积,再递归计算。在处理分数输出时,需注意避免无限循环和除零错误,如在分数运算前先约简,确保分子分母互质,且所有计算基于整数进行,最后再转为浮点数,以避免浮点数误差。 为提升代码可读性和可维护性,建议采用面向对象编程,将矩阵类和分数类封装,每个类有明确功能和接口,便于后续扩展如矩阵求逆、计算特征值等功能。 总结C++实现行列式计算的关键步骤:一是定义矩阵类和分数类;二是实现矩阵基本操作;三是设计行列式计算函数;四是用分数类处理精确计算;五是编写测试用例验证程序正确性。通过这些步骤,可构建一个高效准确的行列式计算程序,支持分数形式计算,为C++编程和线性代数应用奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值