黑马程序员_对象的简单分析_对象与函数参数_常见错误



黑马程序员_对象的简单分析_对象与函数参数_常见错误


一、面向对象封装的好处


1.更加接近人类的思考方式。
2.只需要关注对象,不需要关注步骤。

二、类的声明和实现


1. @interface 和 @implementation的分工
  * @interface就好像暴露在外面的时钟表面。
  * @implementation就好像隐藏在时钟内部的构造实现。

三、常见错误


1.只有类的声明,没有类的实现。
2.漏了@end
3. @interface 和 @implementation嵌套
4.两个类的声明嵌套
5.成员变量没有写在括号里面
6.方法的声明写在了大括号里面

四、语法细节


1.成员变量不能在{}中进行初始化,不能被直接拿出去访问
2.方法不能当作函数一样调用
3.成员变量、方法不能用static等关键字修饰,别跟C语言混在一起(暂时忽略)
4.类的实现可用写在main函数后面,主要在声明后面就行了。

五、OC方法和函数的区别


1.OC方法只能声明在@interface和@end之间,只能实现在@implementation和@end之间;
  也就是说OC方法不能独立于类存在。
2.C函数不属于类,跟类没有联系,C函数只归定义函数的文件所有。


六、对象但简单分析

1.每个对象都占据一块存储空间。
2.类在内存中只占有一块存储空间。
3.创建类时在内存中创建一块存储空间。
4.在使用类创建对象之前,会将类加载进内存(只会加载一次)。
5.每个对象内部默认都有一个isa指针,这个指针指向对象所对应的类。
6.类中的方法列表是所有对象一起使用的。
7.成员变量每个对象都有一份,但是方法列表是公用的。


七、对象与参数


对象成员变量作为函数参数。
指向对象的指针作为函数参数
修改指向对象的成员
修改指针的指向


对象与函数参数代码示例:

#import <Foundation/Foundation.h>

@interface Car : NSObject
{	// 成员变量
	@public
	int wheels;
	int speed;
}

- (void)run;

@end

@implementation Car

- (void)run
{
	NSLog (@"%d个轮子,速度为%dkm/h的车子跑起来了。",
		wheels, speed);
}

@end

void test(int w, int s)
{
	w = 20;
	s = 200;
}

void test1(Car *newC)	// 传递Car类对象的地址
{
	newC->wheels = 5;
}

void test2(Car *newC)
{
	Car *c2 = [Car new];
	c2->wheels = 5;
	c2->speed = 300;

	newC = c2;
	newC->wheels = 6;
}

int main()
{
	Car *c = [Car new];
	c->wheels = 4;
	c->speed = 250;

	test(c->wheels, c->speed);	// 值传递
	// test1(c);
	test2(c);

	[c run];

	return 0;
}


常见错误代码分析:

#import <Foundation/Foundation.h>

@interface Car : NSObject
{
	// 成员变量\实例变量

	int wheels;

	// int wheels = 4; 不允许直接初始化
	// int wheels; 重复错误
	// - (void)run;	方法的声明写在大括号{}外面
	// static int wheels;	不能随便将成员变量当作C语言中的变量来使用
}

- (void)run;

/*
  * 方法的实现必须写在@implementation里面
- (void)fly
{

}
 */

/*
  * @interface 和 @implementation嵌套错误
@implementation Car
- (void) run
{
	NSLog (@"%d个轮子的车子跑起来了。", wheels);
}
@end

 */


int main()
{
	// wheels = 10; 实例变量不可直接赋值

	Car *c = [Car new];

	return 0;
}

// 类的实现可以放在main()函数的后面,但是声明必须放在前面。
// 就像函数一样,函数的声明放在main的前面,函数的定义可以放在前面也可以放在后面。
@implementation Car

// - (void)fly;	方法声明必须写在@interface里面

// - static (void)run 没有内部方法这个概念
- (void) run
{
	NSLog (@"%d个轮子的车子跑起来了。", wheels);
}

@end

static void test()
{}



基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模线性化处理,从而提升纳米级定位系统的精度动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计优化,适用于高精度自动化控制场景。文中还展示了相关实验验证仿真结果,证明了该方法的有效性和先进性。; 适合人群:具备一定控制理论基础和Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模线性化提供一种结合深度学习现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值