C语言的类和对象
- 格式:pdf
- 大小:273.32 KB
- 文档页数:12


c语⾔对象(函数,类,变量)的声明与定义
最近在看⼀本《c缺陷与陷阱》,意识到在⼤型程序时对象的声明与定义的重要性
普通变量的定义与声明
每个外部对象都必须在程序的某个地⽅进⾏定义。因此如果⼀个程序中包含了语句extern int a;//声明变量a
那么,这个程序就必须在别处的某个地⽅包括语句 int a;//代表定义外部int型变量a
或者 int a=10;//定义变量a并初始化
这两个语句既可以在同⼀个源⽂件中,也可以不在同⼀源⽂件中
若⼀个变量前加了static修饰符static int a;//定义变量a,但变量a只在此⽂件中起作⽤
static修饰符不仅适⽤于变量,也适⽤于函数。如果⼀个函数f()调⽤函数g(),且只有该函数f调⽤函数g,那么就可以把函数f函数g写在同⼀个⽂件中,并把函数g声明为static型的,
表明这个对象或者函数的作⽤域只在此⽂件中。
函数的声明⽅式
(作⽤域修饰符)返回值类型 函数名(参数表)
函数的定义⽅式
返回值类型 函数名 (参数表){
函数体
}
对C++编译器⽽⾔,当调⽤函数的时候,编译器只需要看到函数的声明。当定义类类型的对象时,编译器只需要知道类的定义,⽽不需要知道类的实现代码。因此,因该将类的定义和函数声明放在头⽂件中,⽽普通函数和类成员函数的定义放在源⽂件中。
这样在⽤到对应的接⼝函数时只需包含xxx.h⽂件即可,在需要修改函数内容时只在xxx.cpp修改。如果需要修改接⼝则只需修改xx.h对应的接⼝,xxx.cpp对应的接⼝即可。
类和对象(Object-C语⾔)
类和对象
⾃动释放池
@autoreleasepool
C语⾔
printf("Hello, World!%d\n", a);
OC中的打印函数
NSLog(@"Hello, World!%d", a); NSLog(@"你好!");
NSLog⽐起printf增加的功能
1.⾃动换⾏
2.附加其他的信息(⽇期, ⼯程名)
注: NSLog⽐较消耗资源, 程序上传APPStore之前, 需要屏蔽掉NSLog
C语⾔的字符串 "iPhone"
OC中的字符串前要加@, @"iPhone"
乔布斯在NEXT公司时, 公司研发了⼀个NEXTStep的⼯具包, 后来乔布斯回到苹果, 也把这个⼯具包带回苹果, 集成到苹果的开发⼯具中,
所以iOS开发中很多都是以NS作为前缀
C语⾔和OC(Objective-C, Objc)的区别
1.OC是C语⾔的超集, OC是在C的基础上做的扩展, C语⾔的语法OC中都⽀持
2.OC扩充了⾯向对象的编程思想
3.OC是⼀门运⾏时语⾔, 编译时只检查语法, 运⾏时才能决定(⽐如执⾏⽅法, 数据类型等)
4.OC类库⾮常丰富
⾯向对象编程OOP(Object Oriented Programming)
⾯向对象编程的核⼼: 类, 对象
⾯向对象编程的三⼤特性: 封装, 继承, 多态
类:具有相同特征和⾏为的事物的抽象
对象: 万事万物皆对象
类与对象的关系
1.类是抽象的, 对象是具体的
2.对象是类的实例
3.类是对象的类型
如何区分类和对象?
看有没有具体到某个事物, 具体就是对象, 不具体就是类
OC中如何创建⼀个类?
1.cmd + n, 创建⽂件, 以CocoaTouch Class为模板创建⼀对⽂件(*.h 和 *.m)
2.在*.h中写实例变量和⽅法声明
3.在*.m中写⽅法实现
通过类来⽣成对象
1.引⼊头⽂件
2.开辟内存空间
《C++面向对象程序设计》实验报告
第 1 页 共 5 页 实验2 类和对象(一)
[实验目的]
1、掌握声明类的方法,类和类的成员的概念以及定义对象的方法。
2、初步掌握用类和对象编制基于对象的程序。
3、学习检查和调试基于对象的程序。
[实验要求]
给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。
[实验学时] 2学时。
[实验内容]
1、有以下程序:
#include
using namespace std;
class Time //定义Time类
{ public: //数据成员为公用的
int hour;
int minute;
int sec;
};
int main( )
{ Time t1; //定义t1为Time类对象
cin>> t1.hour; //输入设定的时间
cin>> t1.minute;
cin>> t1.sec;
cout<
return 0;
}
改写程序,要求:
①将数据成员改为私有的。
②将输入和输出的功能改为由成员函数实现,并在类体内定义成员函数。
[改后的程序] 《C++面向对象程序设计》实验报告
第 2 页 共 5 页 #include
using namespace std;
class Time
{
private:
int hour;
int minute;
int sec;
public:
void get()
{
cin>> hour;
cin>> minute;
cin>> sec;
}
void show()
{
cout<
}
};
int main()
{
Time t1;
C对象和实例的区别,以及用new和不用new创建类对象区别
起初刚学C 时,很不习惯用new,后来看老外的程序,发现几乎都是使用new,想一想区别也不是太大,但是在大一点的项目设计中,有时候不使用new的确会带来很多问题。当然这都是跟new的用法有关的。new创建类对象,使用完后需使用delete删除,跟申请内存类似。所以,new有时候又不太适合,比如在频繁调用场合,使用局部new类对象就不是个好选择,使用全局类对象或一个经过初始化的全局类指针似乎更加高效。
C 对象实例化的一些概念:
C 如果直接定义类,如classA a; a存在栈上(也意味着复制了对象a在栈中);
如果classA a = new classA就存在堆中。
一、new创建类对象与不new区别
下面是自己总结的一些关于new创建类对象特点:
• new创建类对象需要指针接收,一处初始化,多处使用
• new创建类对象使用完需delete销毁
• new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间
• new对象指针用途广泛,比如作为函数返回值、函数参数等
• 频繁调用场合并不适合new,就像new申请和释放内存一样
二、new创建类对象实例
1、new创建类对象例子:
CTest* pTest = new CTest();
delete pTest;
pTest用来接收类对象指针。
不用new,直接使用类定义申明:
CTest mTest; 此种创建方式,使用完后不需要手动释放,该类析构函数会自动执行。而new申请的对象,则只有调用到delete时再会执行析构函数,如果程序退出而没有执行delete则会造成内存泄漏。
2、只定义类指针
这跟不用new申明对象有很大区别,类指针可以先行定义,但类指针只是个通用指针,在new之前并为该类对象分配任何内存空间。比如:
CTest* pTest = NULL;