摘要: 阅读全文
posted @ 2013-08-20 19:36 shouqiang Wei 阅读(297) 评论(0) 推荐(0) 编辑
摘要: 在c++中我们可以多继承来实现代码复用和封装使程序更加简练。在objective-c中只能单继承,不能多继承,那么除了协议protocol之外,我们可以实现类似多继承的一个方法就是,分类(category,又称类别)。类别可以不修改原来的类(父类),和派生类的情况下,为原有的类增加新的方法,但是分类不能增加实例变量。格式(format):@interface class_name(category_name)method _declaration;....@end@implementationclass_name(category_name)method_implementation;...@ 阅读全文
posted @ 2013-08-20 17:13 shouqiang Wei 阅读(304) 评论(0) 推荐(0) 编辑
摘要: 复合类5.复合类现实中,复杂的对象都是由较小和较为简单的对象构成;由简单对象创建复杂对象的过程称作合成。合成通常使用在有has-a关系的对象;通常的基本数据类型可以满足构造简单和小的对象。为了从小的对象创建复杂的对象,C++提供了复合类-将小的类作为复合类的成员变量复合类的好处:A)每个单独的类可以保持相对简单和直观,负责其自己的任务;B)每个对象可以自包含,更易重用;C)复合类使用简单的类完成复杂的工作,只需注重子类之间的数据流程。XYPoint类XYPoint.h文件#import @interface XYPoint : NSObject{ int x; int y;}@proper.. 阅读全文
posted @ 2013-08-14 20:33 shouqiang Wei 阅读(251) 评论(0) 推荐(0) 编辑
摘要: 属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter一、普通的get 和set 属性。一般的get 和set 属性。就是在get 中返回一个变量的值,而在set 属性中给一个变量赋值,一般的我们也把他们称之为接口,用来访问类的私有(private)或者保护(protected)成员。Circle.h文件#import @interface Circle : NSObject{ int radius; int x; int y;}-(int)getX;-(int)getY;-(int)getRadius;-... 阅读全文
posted @ 2013-08-14 19:49 shouqiang Wei 阅读(468) 评论(0) 推荐(0) 编辑
只有注册用户登录后才能阅读该文。 阅读全文
posted @ 2013-08-14 16:29 shouqiang Wei 阅读(10) 评论(0) 推荐(0) 编辑
摘要: Objective-C 起源与发展Brad J. Cox designed theObjective-C language in the early 1980 .布兰德于1980年设计的Objective-C语言。1998年 NEXT SOFTWARE 颁发了Objective-C 并且开发了类库和开发环境,叫做NEXTSTEP。几乎大部分的cocoa都是基于NS的。这也就是为什么Objective-C 中的类都是以NS开头的原因。1996年苹果公司收购了NEXT SOFTWARE,从此Objective-C用来为苹果设计OS X 系统。Objective-C:加强版的C,基于c语言设计的,. 阅读全文
posted @ 2013-08-13 20:19 shouqiang Wei 阅读(305) 评论(0) 推荐(0) 编辑
摘要: #include #include typedef struct node { int name[5]; struct node *next; } student;struct node* creatList(int n){ int i=0; student *head,*p; head=(student*)malloc(sizeof(student)); head->next=NULL; printf("请输入%d个数据,来创建链表\n",n); for(;iname)); p->next=head->next; head->next=p; } r 阅读全文
posted @ 2013-08-09 19:28 shouqiang Wei 阅读(198) 评论(0) 推荐(0) 编辑
摘要: #include #define MAX 100void dispaly(int a[],int n){ for(int i=0;ia[j+1]) { int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } dispaly(a,n); }}//insert sort 插入排序void insertSort(int a[],int n){ for(int i=1;i0 &&a[j]a[j+1]) { min=a[j+1]; index=j+1; } } int temp=a[i]; a[i]=min; a... 阅读全文
posted @ 2013-08-09 15:58 shouqiang Wei 阅读(292) 评论(0) 推荐(0) 编辑
摘要: Inheritance&&polymorphism层次概念是计算机的重要概念。通过继承(inheritance)的机制可对类(class)分层,提供类型/子类型的关系。C++通过类派生(class derivation)机制来支持继承。继承是使子类可以使用父类的成员,达到代码的复用和类的抽象 被继承的类型称为基类(base class)或超类(superclass),新产生的类为派生类(derived class)或子类(subclass)。基类和派生类的集合称作类继承层次结构(hierarchy)。如果基类和派生类共享相同的公有接口,则派生类被称作类的子类型(subtype) 阅读全文
posted @ 2013-08-08 20:17 shouqiang Wei 阅读(294) 评论(0) 推荐(0) 编辑
摘要: //菱形继承 ||||||| 虚继承#include using namespace std;class R{ int r;public: R(int i=0):r(i) {} virtual void printOn() { coutprintOn(); return 0;} 阅读全文
posted @ 2013-08-08 16:26 shouqiang Wei 阅读(151) 评论(0) 推荐(0) 编辑
摘要: #include #include using namespace std; class Complex { public: Complex(float r=0,float i =0):_r(r),_i(i) { } void print() const { cout<<" _r "<<_r<<" _i "<<_i<<endl; } private: float _r; float _i; public: const Complex& operator+=(const Complex & 阅读全文
posted @ 2013-08-06 19:19 shouqiang Wei 阅读(385) 评论(0) 推荐(0) 编辑
摘要: 一般的我们喜欢这样对对象赋值:Person p1;Person p2=p1;classTobject(another_object),orAa(b);classTobject=anotherobject;classA{//…};intmain(){Ax;Ay(x);//…Az=x; z=y;}这样的话,如果成员变量中有指针的话,就容易造成指针的二次删除。这样就需要我们显示的在类中实现1、拷贝构造,2、赋值运算符重载。 1)、判断是不是自赋值,2)、释放旧空间,3)、开辟新空间。4)、内容本身的 拷贝,5)、返回*this3、析构函数(释放指针指向的空间)。这三步使类实现深拷贝,从而避免... 阅读全文
posted @ 2013-08-05 20:20 shouqiang Wei 阅读(340) 评论(0) 推荐(0) 编辑
摘要: 在C++中,所谓“继承”就是在一个已存在的类的基础上建立一个新的类。已存在的类(例如“马”)称为“基类(base class )”或“父类(father class )”。新建的类(例如“公马”)称为“派生类(derived class )”或“子类(son class )”。以上介绍的是最简单的情况:一个派生类只从一个基类派生,这称为单继承(single inheritance),这种继承关系所形成的层次是一个树形结构。一个派生类不仅可以从一个基类派生,也可以从多个基类派生。一个派生类有两个或多个基类的称为多重继承(multiple inheritance)。关于基类和派生类的关系,可以表述 阅读全文
posted @ 2013-08-05 12:24 shouqiang Wei 阅读(345) 评论(0) 推荐(0) 编辑
摘要: c++,vc6.0,中友元函数,无法访问私有字段(private)的问题(problem),cannot access private member declared in class 'Date'代码如下:#ifndef _DATE_H_ #define _DATE_H_ #include using namespace std; class Date { public: Date(); Date(int y,int m,int d); void printOn(); private: int _year; int _mounth; int _day; friend cons 阅读全文
posted @ 2013-08-02 16:13 shouqiang Wei 阅读(449) 评论(0) 推荐(0) 编辑
摘要: #include using namespace std; class Vector { private: int *dwp; int size; void clone(const Vector v) { this->size=v.size; this->dwp=new int[size]; for(int i=0;idwp[i]=v.dwp[i] } } void dispose() { delete[] dwp; // 删除指针指向的空间,如果不删除,在调用析构函数的时候只会释放指针本身所占用的内存。 } public: //拷贝构造, Vec... 阅读全文
posted @ 2013-08-01 19:04 shouqiang Wei 阅读(180) 评论(0) 推荐(0) 编辑
摘要: #include using namespace std; class Demo { private: int dwint; public: Demo(int i=0):dwint(i) { coutdwint=a.dwint; cout<<"assignment operator used"<<endl; return *this; } }; Demo func(Demo d) { Demo demo; demo=d; return demo; } int main() { Demo a(4); { Demo b; b=func(a); } Dem 阅读全文
posted @ 2013-08-01 19:03 shouqiang Wei 阅读(223) 评论(0) 推荐(0) 编辑
摘要: 当构造函数只有一个参数(或者有多个参数,但是其他参数都带有默认值,(有默认值的参数靠右排放),这样就可以在调用的时候只传一个参数,)就可以被用来做类型转换,#include #include using namespace std; class String { int len ; char * rep; public: String():len(0) { rep=new char[1]; strcpy(rep,""); } String(char* s) { if(!s) { len=0; rep=new char[1]; strcpy(re... 阅读全文
posted @ 2013-08-01 18:57 shouqiang Wei 阅读(341) 评论(0) 推荐(0) 编辑
摘要: ++运算符重载有前置和后置两种,所以要定义一个参数 int来区分前置和后置,带int参数的代表后置,然后再后置函数里面调用前置函数,这样的话就保持了和前置函数一样的自增幅度。在前置函数里面要返回对象的引用,在后置函数里面返回一个对象的拷贝,而对对象进行自增。//单目运算符重载 ++ #include using namespace std; class Fraction { private: int den; int num; public: Fraction(int d=1,int n=0):den(d),num(n) { } //前置 prefix ... 阅读全文
posted @ 2013-08-01 18:51 shouqiang Wei 阅读(265) 评论(0) 推荐(0) 编辑
摘要: == 运算符重载既不能是成员函数也不能是友元函数,只能是普通函数。#include using namespace std; class Vector { public: Vector(int s,int an_array[]); ~Vector() { delete []rep; } int get_size()const { return size; } //重载等号= const Vector& operator=(const Vector & x); int operator[] (int index) { retur... 阅读全文
posted @ 2013-08-01 17:37 shouqiang Wei 阅读(341) 评论(0) 推荐(0) 编辑
摘要: operator overloading(操作符重载,运算符重载)所谓重载就是重新赋予新的意义,之前我们已经学过函数重载,函数重载的要求是函数名相同,函数的参数列表不同(个数或者参数类型)。操作符重载也叫运算符重载,顾名思义,运算符重载就是给运算符赋予新的意义,新的使命。1、首先要说的是,c++中不允许用户自定义运算符,只允许程序员重载运算符。2、那些运算符可以重载?c++中绝大部分与运算符允许重载,不能重载的运算符有5类, (1).(成员访问运算符)。(2).*(成员指针运算符)(3)::(域运算符) (4)sizeof(长度运算符(5):?(条件运算符/三目运算符)3、操作符重载的意义,. 阅读全文
posted @ 2013-07-31 12:27 shouqiang Wei 阅读(183) 评论(0) 推荐(0) 编辑