精华内容
下载资源
问答
  • 什么多态多态实现方法是什么? 点击查看

    什么是多态,多态的实现方法是什么?
    点击查看

    展开全文
  • 使用多态实现一个线性表(队列,串,堆栈) 要求: 具有线性表的基本操作:插入,删除,测长等。 思路: 队列,堆栈都以实现push,pop,测长等操作。 现在要求用多态实现,就要建立一个线性表的共性模板,来...
    /*
     使用多态实现一个线性表(队列,串,堆栈)
     要求:
     具有线性表的基本操作:插入,删除,测长等。
    
      思路:
          队列,堆栈都以实现push,pop,测长等操作。
    	  现在要求用多态实现,就要建立一个线性表的共性模板,来实现以上功能。
    */
    #include<iostream>
    using namespace std;
    template<typename T>
    class Tcontainer
    {
    public:
    	virtual void push(const T& ) = 0;
    	virtual void pop() = 0;
    	virtual const T& begin() = 0;
    	virtual const T& end() = 0;
    	virtual size_t size()  = 0;
    };
    
    
    template<typename T>
    class Tvector:public Tcontainer<T>
    {
    public:
    	static const size_t _step  = 100 ;
    	Tvector()
    	{
    		_size = 0;
    		_cap = _step;
    		buf = 0;
    		re_capacity(_cap);
    	}
    
    	~Tvector()
    	{
    		free(buf);
    	}
    
    	void re_capacity(size_t s)
    	{
    		if(!buf)
    		{
    			buf = (T*)malloc(sizeof(T)*s);
    		}
    		else
    			buf = (T*)realloc(buf,sizeof(T)*s);
    	}
    
    	virtual void push(const T& v)
    	{
    		if(_size >= _cap)
    		{
    			re_capacity(_cap += _step);
    		}
    
    		buf[_size++]  = v;
    	}
    
    	virtual void pop()
    	{
    		if(_size)
    		{
    			_size--;
    		}
    	}
    
    	virtual const T& begin()
    	{
    		return buf[0];
    	}
    
    	virtual const T& end()
    	{
    		if(_size)
    			return buf[_size -1];
    	}
    
    	virtual size_t size()
    	{
    		return _size;
    	}
    
    	const T& operator[] (size_t i)
    	{
    		if( i >= 0 && i < _size)
    		{
    			return buf[i];
    		}
    	}
    private:
    	size_t _size;
    	size_t _cap;
    	T* buf;
    };
    
    
    int main()
    {
    	Tvector<int> v;
    	for(int i = 0; i < 100; ++i )
    	{
    		v.push(i);
    	}
    
    	for(int i = 0; i<100;++i)
    	{
    		cout<<v[i]<<endl;
    	}
    	return 0;
    }
    	  
    

    展开全文
  • 多态实现

    2013-01-17 15:58:32
    多态Ploymorphism:理解多态原理,用抽象类和抽象方法,以及虚函数实现多态。 封装Encapsulation:保证对象自身数据的完整性、安全性。 v 在基类Person中声明抽象方法Login(),让它约束子类,必须实现不同的...

    继承inheritance:实现代码的复用,建立类的层次关系。

    多态Ploymorphism:理解多态原理,用抽象类和抽象方法,以及虚函数实现多态。

    封装Encapsulation:保证对象自身数据的完整性、安全性。

    在基类Person中声明抽象方法Login(),让它约束子类,必须实现不同的Login(),从而实现多态。

    (1)抽象方法是一个没有方法体的方法,用关键字abstract修饰。语法如下:

    Ø <访问修饰符> abstract返回类型方法名(<参数>);

    Ø  方法被标记为抽象的,要求子类必须实现该方法;方法没有方法体(方法名括号后直接跟一个分号结束),提醒编译器注意,如果子类没有重写该抽象方法,就会报错。

    Ø  注意:抽象方法没有闭合的大括号,下面的声明方式是错误的:

    § <访问修饰符> abstract 返回类型 方法名(<参数>){}

    (2)含有抽象方法的类被称为抽象类,用关键字abstract修饰。语法如下:

    Ø  <访问修饰符> abstract class类名

    Ø  抽象类中并不一定都是抽象方法,抽象类中也可以容纳具体实现的方法。但是,有抽象方法的类必然是抽象类。

    v  (3)在子类中,通过关键字override重写抽象方法,语法如下:

    Ø <访问修饰符> override返回类型方法名(<参数>){}

    考虑背景:

    Ø  通常情况下,许多角色的用户登录系统的逻辑是一样的,只是管理员(Admin)的有所差别。

    Ø  那么这个通用的登录方法应该放在哪里呢?按照上面的思想,应该放在父类里面。

    思路:

    Ø  “父类(Person)中的Login()方法实现通用的登录逻辑,一般用户(User)默认采用父类的登录方法即可,管理员(Admin)可以把父类的登录方法重写,实现管理员特有的登录逻辑”。

    实现方式:

    Ø  C#中用virtual方法修饰的方法称为虚方法,虚方法可以有具体的实现,也可以被重写。在父类中定义虚方法,然后在子类中可以重写虚方法,也实现了面向对象的多态。

    Ø 虚方法的语法如下:

    § <访问修饰符> virtual 返回类型方法名(<参数>)

    § {

    §     //方法体

    § }

     

     

    展开全文
  • 多态实现机制是什么

    千次阅读 2019-05-08 22:31:30
    多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作在不同对象时,会有不同的语义,从而会产生不同的结果,例如:同样是执行“+”操作,“3+4”用来实现正数相加,而“3”+“4”却实现了字符串的...


    多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作在不同对象时,会有不同的语义,从而会产生不同的结果,例如:同样是执行“+”操作,“3+4”用来实现正数相加,而“3”+“4”却实现了字符串的连接。在java语言中,多态主要有以下两种表现方式:
    1)方法的重载。重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此在编译时就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。
    2)方法的覆盖。子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。在java语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现的实例对象。而程序调用的运行方法在运行期间才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法。通过这种动态绑定的方法实现了多态。由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称为运行时多态,示范如下:

    方法覆盖

    class Base{
        public Base(){
            g();
        }
        public void f(){
            System.out.println("Base f()");
        }
        public void g(){
            System.out.println("Base g()");
        }
    
    }
    class Derived extends Base{
        public void f(){
            System.out.println("Derived f()");
        }
        public void g(){
            System.out.println("Derived g()");
        }
    }
    public class Test {
        public static void main(String[] args) {
            Base b=new Derived();
            b.f();
            b.g();
        }
    }
    
    

    程序运行结果为:

    Derived g()
    Derived f()
    Derived g()
    

    上例中,由于子类Derived的f()方法和g()方法与父类Base的方法同名,因此Derivered的方法覆盖Base的方法。在执行Base b=new Deriver()语句时,会调用Base类的构造函数,而在Base的构造函数中,执行了g()方法,由于Java语言的多态特性,此时会调用子类Derived的g()方法,而非父类Base的g()方法,因此会输出Deriver g()。由于实际上创建的是Deriver类的对象,后面的方法调用都会调用子类的Deriver的方法。
    此外,只有类中的方法才有多态的概念,类中成员变量没有多态的概念,示例如下:

    class Base1{
        public int i=1;
    }
    class Deriver1 extends Base1{
        public int i=2;
            }
    public class Test1 {
        public static void main(String[] args) {
            Base1 b = new Deriver1();
            System.out.println(b.i);
        }
    }
    
    

    我们的运行结果是

    1
    

    由此可见,成员变量是无法实现多态的,成员变量的值取父类还是子类并不取决于创建对象的类型,而是取决于所定义变量的类型,这是在编译期间确定的。
    在上述例子中,由于b所属的类型是Base,b.i指的是Base类中定义的i;因此程序输出结果为1.

    常见笔试题

    java中提供了哪两种用于多态的机制?
    答案:编译时多态和运行时多态。编译时多态是通过方法重载实现的,运行时多态是通过方法的覆盖(子类覆盖父类方法)实现的。

    展开全文
  • 现在基本上知道了什么多态,接着我们来一个例子使用多态和不使用多态实现一个小功能的对比。感受下使用多态带来的便利。 1.非多态方式实现计算器 这里计算器我们就简单描述成两个数的相加,相减和相乘。 #...
  • 多态

    2021-03-01 09:41:35
    使用多态实现思路:(1)编写具有继承关系的父类和子类.(2)子类重写父类方法(3)使用父类的引用指向子类的对象(向上转型,自动进行类型转换). 实现多态的两种形式:(1)使用父类作为方法形参实现多态(2)使用父类作为方法返
  • 本文实例讲述了C#使用虚拟方法实现多态。分享给大家供大家参考。具体分析如下: 我们看一个例子,假若有一个动物类,类中用方法cry()描述动物的叫声,不同的动物的叫声是不一样的。根据继承的特征,把类中公共部分的...
  • Golang继承多态实现

    2017-02-21 16:17:59
    思路: 1.结构体方法可以继承(也不是继承,父结构体的方法可以顺延下来)。 2.利用接口。 3.利用父结构体self变量,替换为真实使用的对象,调用的时候使用struct.self.Method调用接口中的方法。 [code="...
  • 但从实际的角度出发,只要一门语言拥有类,对象的概念,以及提供了对应的语法,就可以用来实现面向对象编程了,所以从这个角度来看,Go语言是可以被认为是一门面向对象编程语言的。 那么抛出第二个问题,Go语言有...
  •  1)使用void * 可传递任意参数 struct device { void *data; void (*set_device)(struct device * dev); };  2)函数指针,根据函数指针注册与否,来执行相应操作 struct device *dev if (!dev...
  • 多态实现原理

    万次阅读 2017-10-20 18:09:05
    多态使用大家应该都比较了解,但是多态实现原理就有点抽象了,查了很多很多资料,连续几天断断续续的看,有时候看着看着就走神了。毕竟太抽象,哈哈~ 不过依然硬着头皮看下来了(也不知道看了多少遍),并且将...
  • 什么多态?如何实现?只看这一篇就够了

    千次阅读 多人点赞 2020-04-12 20:00:12
    2. 多态的定义及实现 2.1多态的构成条件 多态是在不同继承关系的类对象,去调用同一函数,产生了不同的行为。 那么在继承中要构成多态还有两个条件: 必须通过基类的指针或者引用调用虚函数 被调用的函数必须是虚...
  • 通过函数参数的不同(参数个数或者类型)实现多态已经有了一个思路,本文介绍另类的多态(参数相同),通过隐藏函数名的方式,采用指针函数和函数指针数组。
  • 第三章 多态 一、编写父子类 1.多态是具有表现多种型生态的能力的特征,同一个实现接口,使用不同的实例而...3. 实现思路编写子类,子类重写父类方法 运行时,使用父类的类型,子类的对象。 二、实现多态的两个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 27,725
精华内容 11,090
关键字:

使用多态实现思路是什么