面向对象:父类子类 函数重载与复写

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    class shengwu
    {

        public void shengming()
        {
            Console.WriteLine("生物都有生命");
        }
        public virtual void huxi()
        {
            Console.WriteLine("生物都呼吸!");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    class shengwu
    {

        public void shengming()
        {
            Console.WriteLine("生物都有生命");
        }
        public virtual void huxi()
        {
            Console.WriteLine("生物都呼吸!");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    class dongwu:shengwu
    {

        public void shengming()
        {
            Console.WriteLine("动物都有生命!");
        }
        public override void huxi()
        {
            Console.WriteLine("动物都呼吸!");
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            shengwu sdata = new shengwu();
            sdata.shengming();//建的哪一个类就调用哪个类的方法,调用shengwu中的shengming()

            dongwu ddata = new dongwu();
            ddata.shengming();//同上

            shengwu zhdata = ddata;
            zhdata.shengming();//子类dongwu直接转化为父类shengwu后,调用父类shengwu的方法shengming()

            dongwu hydata = (dongwu)zhdata;
            hydata.shengming();//转化为父类的dongwu再转回子类dongwu后,调用子类dongwu的方法shengming()

            sdata.huxi();
            ddata.huxi();
            zhdata.huxi();//复写函数(复写前virtual,复写后override),子类转换为父类后调用的复写后(子类)的函数而不是父类的函数
            hydata.huxi();//转化为父类的dongwu再转回子类dongwu后,调用子类dongwu的方法shengming()

            Console.ReadLine();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication3
{
    class Program
    {
        static void Main(string[] args)
        {
            shengwu sdata = new shengwu();
            sdata.shengming();//建的哪一个类就调用哪个类的方法,调用shengwu中的shengming()

            dongwu ddata = new dongwu();
            ddata.shengming();//同上

            shengwu zhdata = ddata;
            zhdata.shengming();//子类dongwu直接转化为父类shengwu后,调用父类shengwu的方法shengming()

            dongwu hydata = (dongwu)zhdata;
            hydata.shengming();//转化为父类的dongwu再转回子类dongwu后,调用子类dongwu的方法shengming()

            sdata.huxi();
            ddata.huxi();
            zhdata.huxi();//复写函数(复写前virtual,复写后override),子类转换为父类后调用的复写后(子类)的函数而不是父类的函数
            hydata.huxi();//转化为父类的dongwu再转回子类dongwu后,调用子类dongwu的方法shengming()

            Console.ReadLine();
        }
    }
}
时间: 2024-11-06 09:47:50

面向对象:父类子类 函数重载与复写的相关文章

0607pm克隆&引用类&加载类&面向对象串讲&函数重载

克隆class Ren{ public $name; public $sex; function __construct($n,$s) { $this->name=$n; $this->sex=$s; } function __clone()//改变克隆的对象内容 { $this->name="李思思";//this代表复本对象 $that->name="李思思";//that代表原本的,后来废弃了 }}$r=new Ren("张丹

面向对象基础:函数重载和构造函数

函数的重载 定义: 1.两个或多个函数在同一个类当中: 2.函数名相同: 3.参数列表不同: 例子如下: //类文件A class A{ //以下3个为成员函数 void funA(){ System.out.println("没有参数的funA函数"); } void funA(int i){ //void为空的返回值,funA为函数名,括号内的为参数 System.out.println("带有整型参数的funA函数"); } void funA(int i ,

c++子类和父类成员函数重名

1子类和父类返回值参数相同,函数名相同,有virtual关键字,则由对象的类型决定调用哪个函数. 2子类和父类只要函数名相同,没有virtual关键字,则子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name. 3子类和父类参数不同,函数名相同,有virtual关键字,则不存在多态性,子类的对象没有办法调用到父类的同名函数,父类的同名函数被隐藏了,也可以强制调用父类的同名函数class::funtion_name. 4子

面向对象(子父类中函数的特点-覆盖)

/* 2,子父类中的函数. 当子类出现和父类一模一样的函数时,//不同名的函数,父类中的非私有函数子类乐意直接拿来用. 当子类对象调用该函数,会运行子类函数的内容. 如同父类的函数被覆盖一样. 这种情况是函数的另一个特性:重写(覆盖)   //前面讲了一个函数的特性,重载//其实父类中的方法还在内存当中,只是没有运行而已. 当子类继承父类,沿袭了父类的功能,到子类中,  //覆写的好处可以用于扩展. 但是子类虽具备该功能,但是功能的内容却和父类不一致, 这时,没有必要定义新功能,而是使用覆盖特殊

sdut 面向对象程序设计上机练习一(函数重载)

面向对象程序设计上机练习一(函数重载) Time Limit: 1000MS Memory limit: 65536K 题目描述 利用数组和函数重载求5个数最大值(分别考虑整数.单精度.长整数的情况). 输入 分别输入5个int型整数.5个float 型实数.5个long型正整数. 输出 分别输出5个int型整数的最大值.5个float 型实数的最大值.5个long型正整数的最大值. 示例输入 11 22 666 44 55 11.11 22.22 33.33 888.88 55.55 1234

c++ 子类切勿重新定义父类 non-virtual函数

子类如果重新定义了父类的non-virtual函数则不会有多态效果. 为方便描述,这里的方法和继承方式都用public.至于原因嘛,你懂的! 1:子类直接继承父类方法 class BaseOption { public: void Function(); }; void BaseOption::Function() { cout<<"BaseOption::Function()"<<endl; } class SubOption : public BaseOpt

【C++】子类在重写虚函数时,会覆盖父类的函数

//子类在重写虚函数时,会覆盖父类的函数 #include <iostream> using namespace std; class B { public: B() { cout<<"Create B!"<<endl; } public: virtual void fun() { cout<<"B::fun()"<<endl; } virtual void show() { cout<<&qu

面向对象程序设计-C++_课时17函数重载和默认参数

函数重载,区别一是参数类型不同,二是参数个数不同. 默认参数可以多于1个,但必须放在参数序列的后部. 尽量不要用默认参数,会影响阅读 error C2668: “f”: 对重载函数的调用不明确 1 #include <iostream> 2 using namespace std; 3 4 void f(int i, int j = 0)//默认参数 5 { 6 std::cout << i << " " << j << st

函数重载、覆盖、多态

#include <iostream> using namespace std; /* *对于纯虚函数可以实现也可以不实现,但派生类一定要覆盖基类的纯虚函数.否则派生类仍然是抽象类 * *如果派生类覆盖基类的虚函数,则基类的指针或引用实际指向子类对象,那么通过该指针或引用调用虚函数时,将调用子类的虚函数;如果不是虚函数,则调用父类的函数. * */ class PEOPLE { public: int age; //派生类必须实现抽象类的纯虚函数,否则派生类仍然是抽象类 virtual voi