c++ 我的问题处在哪里啊 还有最后一个错误Cthe human animal类不是继承了CAnimal类的吗,为

Objective-C基础1:OC中类的继承和组合
1.类的定义和声明
OC中的类声明是以@interface开始@end结束。
OC中的类定义以@implementation开始@end结束。
OC中的方法声明:
- (void) setName : (NSString*) strN前面的短线-表示这是一个方法,(void)表示返回值, setName表示方法名称,(NSString*) StrName表示参数是NSString*类型,名称是strName,注意:()一定要加
OC中的成员变量定义在类声明的{}中,这一点跟方法声明不一样,方法在{}外
OC中的对象创建方法:Animal* animal = [Animal new]; 表明对Animal类调用new方法分配一块内存创建对象。
OC中的方法调用:[animal setName : @&akon&];表明调用对象animal方法setName,传入参数为akon。
需要注意的是:OC中的方法调用都是以中括号[]括起来的。
编程好习惯:类名以大写字母开头,方法名和变量名字以小写字母开头。
@interface Animal : NSObject
NSString* strN
- (void) setName : (NSString*) strN
- (NSString*) getN
@implementation Animal
- (void) setName : (NSString*) strNameIn
strName = strNameIn;
- (NSString*) getName
return strN
int main(int argc, const char * argv[]) {
Animal* animal = [Animal new];
[animal setName : @&akon&];
NSString* strName = [animal getName];
NSLog(@&name:%@&, strName);
2.类的继承
其实上面例子中的Animal就演示了类的继承Animal类继承于NSObject,为了加深印象,分别创建两个类Cat和Dog继承于父类Animal,代码如下:
@interface Animal : NSObject
NSString* strN
- (void) setName : (NSString*) strN
- (NSString*) getN
- (NSString*) manCallMe;
@interface Cat : Animal
@interface Dog : Animal
&上述Animal类定义了一个方法manCallMe,定义这个方法的意图是为了实现类似C++里面的虚函数,C++里面是通过虚函数来实现动态绑定的。
&那么OC是如何实现动态绑定的呢?只要子类覆盖父类的方法即可。代码见下:
Created by mac on 15/1/17.
Copyright (c) 2015年 akon. All rights reserved.
#import &Foundation/Foundation.h&
#import &Animal.h&
@implementation Animal
- (void) setName : (NSString*) strNameIn
strName = strNameIn;
- (NSString*) getName
return strN
- (NSString*) manCallMe
return @&Animal&;
@implementation Cat
- (NSString*) manCallMe
return @&Cat&;
@implementation Dog
- (NSString*) manCallMe
return @&Dog&;
&在创建对象的时候,以id类型保存对象指针,代码如下:
int main(int argc, const char * argv[]) {
id animal[3];
animal[0] = [Animal new];
[animal[0] setName : @&a&];
animal[1] = [Cat new];
[animal[1] setName : @&b&];
animal[2] = [Dog new];
[animal[2] setName : @&c&];
for (int i = 0; i & 3; ++i) {
NSLog(@&getName:%@, manCallMe:%@&, [animal[i] getName], [animal[i] manCallMe]);
有的时候子类需要调用父类的方法,如何做,类似于C++__super关键字,OC中有有super关键字,比如在Cat中调用Animal的manCallMe方法,这样干:
[super manCallMe]
3.类的组合
继承跟组合是复用类的两种方法,那么什么时候用继承什么时候用组合呢?继承强调的是&是一种&关系,比如猫是动物的一种,够是动物的一种。那么猫和狗就应该继承于动物。组合强调的是''有''的关系,比如动物有腿,有眼睛,那类动物就应该组合腿和眼睛。
组合的实现很简单,就是简单地把方法调用委托给被组合类。比如动物类有个方法'&放电&,那么这个方法的实现就可以调用眼睛的放电方法来实现。由于很简单,代码就不上了。
objectiveC中类方法和实例方法的问题 书上写类方法不能对实例使用,可是我看每个实例不都是调用的类方法处理的嘛,能区别一下类方法和实例方法的区别吗?本人新手,请多指教!!
------解决方案-------------------- 前面带“+”号的是类方法,你可以理解成static的,只要定义了,就在程序中占有了空间,“-”号的是实例方法,这个是需要生成实例对象,是需要实例调用的。
[源码下载]
积少成多Flash(2) - ActionScript 3.0 基础之包、类、包外类、命名空间、属性、方法、接口和继承
作者: webabcd
介绍 Flash ActionScript 3.0 是一种面向对象的语言,包、类、包外类、命名空间、属性、方法、接口和继承
FunctionTest.as
packageaction
JavaScript Inheritance
And you think you're so clever and classless and free--John Lennon JavaScript一种没有类的,面向对象的语言,它使用原型继承来代替类继承。这个可能对受过传统的面向对象语言(如C++和Java)训练的程序员来说有点
怎样在一个继承了非activity和service类中发广播 这个类继承的是一款移动发送消息的SDK,所以不能继承service和Activity了,结果发广播最后一步APP就自动关掉了,求高人解答。。。
@Override publicvoidonNotifyData(intresult,byte[]data){ Stri
黑马程序员————OC概述
一、前言 学习是iOS开发,需要学习iOS的开发语言Objective-C即OC。而要学习OC有一定的基础是必须的。OC是在C语言的基础上,增加了面向对象的语法,扩展了类、消息、继承等。
oc中代理的具体实现步骤和格式是啥? oc中代理的具体实现步骤和格式是啥?哪位大神不嫌小弟问的肤浅还望回答一下小弟感激不尽
------解决方案-------------------- 这个看看基础书籍就一清二楚了
继承是我们在实现面向对象编程的时候很重要的一个手段。虽然我们讲不能过度继承,多利用组合代替继承,但是继承总是免不了的。这里要讨论的就是Javascript中的继承机制。 Javascript中实际上是没有继承的概念的,但是我们可以通过一些手段来模仿实现它。这种继承实际上把一个对象复制到另外一个对象内部。你需要注意的是所有的本地类和宿主类是不能作为基类被继承的,主要是为了安全方面的考虑。 Javas
相对于C++的继承编写,Python更简洁,而且效率也是很高的,下面编写一个简单Python的继承例子。
#!/usr/bin/python
#filename: pyclass.py
class Member:
我没看过oc的全部语法,这个@出现很多地方有哪里是需要用的诶
------解决方案-------------------- 这只是OC里面语法编写的一种格式,习惯就好。
------解决方案-------------------- 在给NSString,NSArray,NSMutableArray等变量赋值时需要带@
如:NSString
什么是继承啊?答:别人白给你的过程就叫继承。 为什么要用继承呢?答:捡现成的呗。 好吧,既然大家都想捡现成的,那就要学会怎么继承! 在了解之前,你需要先了解构造函数、对象、原型链等概念...... JS里常用的两种继承方式:
原型链继承(对象间的继承)类式继承(构造函数间的继承)
原型链继承:
//要继承的对象 var parent={ name : &baba
说好的讲解JavaScript继承,可是迟迟到现在讲解。废话不多说,直接进入正题。   既然你想了解继承,证明你对JavaScript面向对象已经有一定的了解,如还有什么不理解的可以参考《面向对象JS基础讲解,工厂模式、构造函数模式、原型模式、混合模式、动态原型模式》,接下来讲一般通过那些方法完成JavaScript的继承。   原型链   JavaScript中实现继承最简单的方式就是使用原型链
OC中alloc内存分配大小的问题 RT,OC中所有的类都继承自NSObject,NSObject实现了alloc函数,而NSObject的子类调用NSObject的alloc函数时,怎么知道要给这个子类分配多大的内存空间呢?
------解决方案-------------------- 目测就是用C的动态内存分配完成的
------解决方案-------------------- 理解错了我
我们已经在第一章中使用prototype属性模拟类和继承的实现。 prototype属性本质上还是一个JavaScript对象。 并且每个函数都有一个默认的prototype属性。 如果这个函数被用在创建自定义对象的场景中,我们称这个函数为构造函数。 比如下面一个简单的场景:
// 构造函数 function Person(name) { this.name =
我今天做的尝试是,如何更它更像其他的语言一样的使用继承机制,多层继承和更方面的调用父类的构造。 我希望达到的效果:
function A(){ alert('a'); } function B(){ this.$supClass(); alert('b'); } extend(B,A); function C(){ this.$supClass(); alert('c');
JS继承 JavaScript中没有类的概念,与类相关的继承的概念更是无从谈起,但是我们可以通过特殊的语法来
模拟面向对象语言中的继承。 在JS中模拟继承有多种方式,其中寄生组合模式是一种比较容易简单的模拟继承模式,下面我们就来
介绍一下用寄生组合模式模拟继承。 JS的继承包括属性的继承和方法的继承,他们分别通过不同的方法来实现。 1属性的继承 属性的继承通过改变函数的执行环境来实现的。而改变
OC中的sortUsingSelector方法是怎么用的? OC中的sortUsingSelector方法是怎么用的? sortUsingSelector: @selector (compareName:) 中的 @selector (compareName:) 是指什么? 那个compareName: 又是指什么?哪位给指点一下
------解决方案--------------------
目前 javascript的实现继承方式并不是通过“extend”关键字来实现的,而是通过 constructor function和prototype属性来实现继承。首先我们创建一个animal 类
var animal = function (){ //这就是constructor function 了
this .name = 'pipi'; this
这里接口的意思是Observable实际上起了一个抽象类的作用,Extjs中有大量的组件都是继承自这个类的。这个类提供了一些基本的方法比如addEvents,addlistener,fireEvent等等。
本文暂时不介绍如何使用extjs的组件响应事件,而是介绍Extjs的事件的一些实现原理。整个Extjs框架都是以一种面向对象的方式开发的,所以理解Javascript中的继承也很重要。我前面
Asp.net的优势就在于快速构建应用,而对于一些最基础数据的增删改以及分页事件或者样式的设定可以通过在父类中写上虚方法来供子类调用,如果子类需要在模板的基础上衍生变化或者索性不要父类的方法的话,则只需要重写父类的方法即可。
实验代码如下: 首先是模板类的抽象,继承自Page类;
public class Template : System.Web.UI.Page { p
多态的实现可以采用和继承类似的方法。首先定义一个抽象类,其中调用一些虚方法,虚方法在抽象类中没用定义,而是通过其具体的实现类来实现。 如下面的例子:
Object.extend=function(destination,source){ for(property in source){ destination[property]=source[property]; } return desti
Grails跟Hibernate和Mongodb的组合
标题看起来很噱头哦
先简要说明一下我在项目中的必要场景:因为采用的Shiro的验证插件,以及一些比较固定的domain,所以会保留Hibernate的domain对象,但是在特定的domain中,要求其字段是可维护的,这对于关系数据库来说,显然不是那么合适,而Mongodb以其Document为基础,却可以满足
prototype(原型) 是 JavaScript 中类的继承手段;
一个类也不过是一组属性和方法的集合, 所谓继承就是继承属性或方法;
属性是个值, 方法是个函数, JavaScript 喜欢把它们都叫成属性, 我们喜欢把它们叫做成员;
JavaScript 默认让每个函数都拥有一个 prototype 对象, 它可以指向一个对象或函数(函数也是对象, 一回事);
{ 抽象类是一定要被继承才可以使用的; 抽象方法是一定要被覆盖才可以使用的. 现在说的是不能被覆盖的方法, 与不能被继承的类. } //譬如: TA = class procedure P {TA 中的虚方法, 将要被覆盖} TB = class(TA) procedure P {覆盖} TC = class(TB) pro
模板继承是ThinkPHP3.1.2版本添加的一项更加灵活的模板布局方式,模板继承不同于模板布局,甚至来说,应该在模板布局的上层。模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。 因此,模板继承的优势其实是设计基础模板中的区块(block)和
&script type=&text/javascript&& //创建基类 function Person(name, age) { this.name = this.age = } //通过原型方式给基类添加函数(这样可以服用此函数) Person.prototype.showName = function () { ale
无参数类继承的问题
先看一段示例代码,实现B继承于A:
function A() { } A.prototype.a1 = function() { };
function B() { } B.prototype = new A(); B.prototype.b1 = function() { };
var b = new B(); alert(b.constructo
[源码下载]
重新想象 Windows 8 Store Apps (16) - 控件基础: 依赖属性, 附加属性, 控件的继承关系, 路由事件和命中测试
作者:webabcd介绍重新想象 Windows 8 Store Apps 之控件基础
DependencyProperty - 依赖属性 AttachedProperty - 附加属性 控件的继承关系 路由事件和命中测试
关于OC的autorelease 我最近在看内存管理方面的知识我想问一下有autorelease了干嘛还要用retain和release啊
所有对象都autorelease多方便
objective-c
------解决方案--------------------
retain和release是IOS内容管理的基础。
JavaScript中类的学习,从基本类继承过来方法 也可以这样实现: Java代码
function newClass(){ this.firstName=&frank&; this.toUc=String.toUpperC this.toString=function(){ return this.toUc(this.firstName); }
先新建一个 VCL Forms Application 工程, 代码中就已经出现了两个 类:
一个是 TForm 类; 一个是 TForm1 类; TForm1 继承于 TForm.
TForm 是 TForm1 的父类; TForm1 是 TForm 的子类.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants
python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。 对经典类和新式类来说,属性的查找顺序是不同的。现在我们分别看一下经典类和新式类两种不同的表现: 经典类:
#! /usr/bin/python
# -*- coding:utf-8 -*-
OC中的SEL类型等问题 SEL 类型是什么意思?有什么作用?最好举个例子给小弟讲一下。 另外,typedef void (^ASIBasicBlock)(void); 这句是什么意思?这个^ 号是干什么用的?最好也能给举例说明一下。 先在此谢过
------解决方案-------------------- SEL 类型传递的值是 @selector(方法名称),你可以把它理解成一个方法的钩子
在开始摆弄代码之前,应该搞清楚使用继承的目的和能带来什么好处。一般来说,在设计类的时候,我们希望能减少重复性的代码,并且尽量弱化类之间的耦合。而要做到这两者都兼顾是很难的,我们需要根据具体的条件和环境下决定我们应该采取什么方法。根据我们对面向对象语言中继承的了解,继承会带类直接的强耦合,但js由于其特有的灵活性,可以设计出强耦合和弱耦合,高效率和低效率的代码。而具体用什么,看情况。 下面提供js实
浅谈UML中的聚合与组合
大家都知道UML的类图中一般包含五种关系即 关联聚合组合泛化 依赖 有些人可能会感觉组合跟聚合有点难区分 说难其实是相对其他几种关系而言 实际上想分清这两种关系一点也不难 聚合跟组合其实都属于关联 只不过它们是两种特殊的关联 因为本是同根生 所以它们之间难免会有相似之处 下面让我们一起来看一下它
我简单的理解策略模式就是把行为(方法)单独的抽象出来,并采用组合(Has-a)的方式,来组合行为和实体的一种模式。再来个官方的解释: Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently fr
oc 又没人总结全面一点的知识点 不要和我说,objective-c基础教程,objective-c2.0
------解决方案-------------------- 1.Navigationcontroller.
2.Tabbarcontroller
我们先看一段传统的继承代码:
//定义超类 function Father(){ this.name = &父亲&; } Father.prototype.theSuperValue = [&NO1&,&NO2&]; //定义子类 function Child(){ } //实现继承 Child.prototype
继承 通常需要这样一些类,这些类与其它现有的类拥有相同变量和函数。实际上,定义一个通用类用于所有的项目,并且不断丰富这个类以适应每个具体项目将是一个不 错的练习。为了使这一点变得更加容易,类可以从其它的类中扩展出来。扩展或派生出来的类拥有其基类(这称为“继承”,只不过没人死)的所有变量和函数,并 包含所有派生类中定义的部分。类中的元素不可能减少,就是说,不可以注销任何存在的函数或者变量。一个扩充类
Android SQLite数据库基础(1)
SQLiteOpenHelper类:是一个抽象类,通过从此类继承实现用户类,来提供数据库打开、关闭等操作函数。 SQLiteDatabase 类:数据库访问类:执行对数据库的插入记录、查询记录等操作。 SQLiteCursor类: 查询结构操作类:用来访问查询结果中的记录。 本小节先讨论下SQLiteOpenHelper类。 1、必须实现的方法为:“
ORACLE RAC中的oc4j和gsd资源以及RAC相关的进程
1.RAC相比单实例数据库多出的进程:
LMS - Gobal Cache Service Process 全局缓存服务进程 LMD - Global Enqueue Service Daemon 全局查询服务守护进程 LMON - Global Enqueue Service Monitor全局查询服务监视进程 LCK0 -以下试题来自:
单项选择题下列有关类继承的叙述中,错误的是A.继承可以实现软件复用B.虚基类可以解决由多继承产生的二义性问题C.派生类构造函数要负责调用基类的构造函数D.派生类没有继承基类的私有成员
为您推荐的考试题库
你可能感兴趣的试题
1A.Value operator+(Value v,int i);B.Value operator+(Value v=value,int i);C.Value operator+(Value V,int i=0);D.Value operator+(Value v=value,int i=0);2A.a[2]B.a[3]C.*(p+2)D.*p+43A.需求分析阶段B.概念设计阶段C.逻辑设计阶段D.物理设计阶段4A.拥有纯虚函数的类是抽象类,不能用来定义对象B.抽象类的派生类若不实现纯虚函数,它也是抽象类C.纯虚函数的声明以“=0;”结束D.纯虚函数都不能有函数体5A.运算符重载是多态性的一种表现B.C++中可以通过运算符重载创造新的运算符C.C++中所有运算符都可以作为非成员函数重载D.重载运算符时可以改变其结合性
热门相关试卷
最新相关试卷C++类的继承 base class undefined 大神求解_百度知道
C++类的继承 base class undefined 大神求解
baidu.baidu.baidu.jpg" />
其他类似问题
为您推荐:
其他3条回答
需要告诉编译程序,则需要用,则需要先于派生类让编译程序读到其具体构成.h文件嵌入。如果是自己编的程序基类Caminal的构成是什么。如果是编译系统提供的
大神我是菜鸟啊
怎么先于派生类让编译程序读到其具体构成
如果基类也是你自己编的,就让编译程序先处理基类程序代码。如果你的源程序都在一个代码文件中,比如在一个.cpp文件中,则基类代码在先,派生类代码在后,编译程序是顺序读源代码进行编译处理的。如果基类代码不在一个文件中,则把该基类对应的.h文件用#include蕴含到你的派生类文件中。这样,编译程序先读到了基类的构成,于是就先知道了基类的定义。说明如下:无论你的类如何构成,派生类一定是基于已知的类来构成的。所以,你自己定义的第一层派生类一定是基于系统提供的基类构成的,于是编写第一层派生类时,用#include蕴含的是系统提供的.h文件。这样就会生成你的第一层派生类的.cpp和.h文件,假定其名为derived1.cpp和derived1.h。假设你是在另一个文件中基于派生类derived1定义另一个派生类derived2(这时,derived1成为基类了),则在derived2.cpp的开头就#include derived1.h,这样,编译程序就先读到了基类的构成,于是就先知道了基类的定义。
怎么明显的拼写错误。。。
请问哪里打错了啊
检查base class是否定义,或是否include其头文件
class的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁以下描述错误的是( )A.在C++中支持抽象类而在C#中不支持抽象类B.C++中可在头文件中声明类的成员而在CPP文件中定义类的成员,在C#中没有头文件并且在同一处声明和定义类的成员C.在C#中可使用 new 修饰符显式隐藏从基类继承的成员D.在C#中要在派生类中重新定义基类的虚函数必须在前面加Override
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 遗产继承在哪里办理 的文章

 

随机推荐