zoukankan      html  css  js  c++  java
  • 抽象方法

      抽象方法(abstract method,也可以称为纯虚函数)是面向对象编程技术的另一个核心概念,在设计一个多层次的类继承关系时常会用到。

      把某个方法声明为一个抽象方法等于告诉编译器这个方法必不可少,但我现在(在这个基类里)还不能为它提供一个实现!

      其实在之前我们已经见过一个应该被声明为抽象方法的好例子了,没错,就是 Pet::play() 方法。 为什么?

      上一个例子中,现实中既不存在什么都玩的宠物,也不存在什么都能玩的游戏。

      每种宠物都有它自己的玩法,而我们的应对措施是输出一条消息说宠物正在玩。

      现在既然知道了抽象方法这个概念,我们就再也用不着编写那些不必要的代码了。

      抽象方法的语法很简单:在声明一个虚方法的基础上,在原型的末尾加上”=0”。(告诉编译器不用浪费时间在这个类里寻找这个方法的实现!),距离如下:

    #include <iostream>
    #include <string>
    
    class Pet
    {
    public:
    	Pet(std::string theName);
    
    	virtual void eat();
    	virtual void sleep();
    	virtual void play() = 0;//抽象方法,基类则用不着编写抽象方法的实现代码 
    
    protected:
    	std::string name;
    };
    
    class Cat : public Pet
    {
    public:
    	Cat(std::string theName);
    
    	void climb();
    	void play();
    };
    
    class Dog : public Pet
    {
    public:
    	Dog(std::string theName);
    
    	void bark();
    	void play();
    };
    
    Pet::Pet(std::string theName)
    {
    	name = theName;
    }
    
    void Pet::eat()
    {
    	std::cout << name << "正在吃东西!
    ";
    }
    
    void Pet::sleep()
    {
    	std::cout << name << "正在睡大觉!
    ";
    }
    
    Cat::Cat(std::string theName) : Pet(theName)
    {
    }
    
    void Cat::climb()
    {
    	std::cout << name << "正在爬树!
    ";
    }
    
    void Cat::play()
    {
    	std::cout << name << "玩毛线球!
    ";
    }
    
    Dog::Dog(std::string theName) : Pet(theName)
    {
    }
    
    void Dog::bark()
    {
    	std::cout << name << "旺~旺~
    ";
    }
    
    void Dog::play()
    {
    	std::cout << name << "正在追赶那只该死的猫!
    ";
    }
    
    int main()
    {
    	Pet *cat = new Cat("加菲");
    	Pet *dog = new Dog("欧迪");
    
    	cat -> sleep();
    	cat -> eat();
    	cat -> play();
    
    	dog -> sleep();
    	dog -> eat();
    	dog -> play();
    
    	delete cat;
    	delete dog;
    
    	return 0;
    }
    

      

  • 相关阅读:
    前端 HTML
    python3内置函数
    内置函数的随机验证码
    线程、进程以及协程,上下文管理器
    线程池的定义方法
    python_控制台输出带颜色的文字方法
    while 循环 continue break 用法例子
    JVM 基础知识
    ios 设置状态栏文本颜色为白色
    ios 常用第三方库要加的framework,ARC的设置
  • 原文地址:https://www.cnblogs.com/tianqizhi/p/10412378.html
Copyright © 2011-2022 走看看