zoukankan      html  css  js  c++  java
  • C++程序设计POJ》《WEEK6 多态与虚函数》《编程作业》

    #include <iostream>
    
    using namespace std;
    
    class A {
    
    public:
    
        A() { }
    
        virtual void func()
    
        {
            cout << "A::func" << endl;
        }
    
        virtual void fund()
    
        {
            cout << "A::fund" << endl;
        }
    
        void fun()
    
        {
            cout << "A::fun" << endl;
        }
    
    };
    
    class B :public A {
    
    public:
    
        B() { func(); }
    
        void fun() { func(); }
    
    };
    
    class C : public B {
    
    public:
    
        C() { }
    
        void func()
    
        {
            cout << "C::func" << endl;
        }
    
        void fund()
    
        {
            cout << "C::fund" << endl;
        }
    
    };
    
    int main()
    
    {
    
        A * pa = new B();
    
        pa->fun(); pa->fun(); // 不是多态,调用普通函数
    
        B * pb = new C();
    
        pb->fun();
        while (1);
        return 0;
    
    }

    //A::func

    //A::fun

    //A::func

    //C::func

    001:看上去像多态

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    程序填空产生指定输出

    #include <iostream>
    using namespace std;
    class B { 
    	private: 
    		int nBVal; 
    	public: 
    		void Print() 
    		{ cout << "nBVal="<< nBVal << endl; } 
    		void Fun() 
    		{cout << "B::Fun" << endl; } 
    		B ( int n ) { nBVal = n;} 
    };
    // 在此处补充你的代码
    int main() { 
    	B * pb; D * pd; 
    	D d(4); d.Fun(); 
    	pb = new B(2); pd = new D(8); 
    	pb -> Fun(); pd->Fun(); 
    	pb->Print (); pd->Print (); 
    	pb = & d; pb->Fun(); 
    	pb->Print(); 
    	return 0;
    }
    输入
    输出
    D::Fun
    B::Fun
    D::Fun
    nBVal=2
    nBVal=24
    nDVal=8
    B::Fun
    nBVal=12
    样例输入
    样例输出
    D::Fun
    B::Fun
    D::Fun
    nBVal=2
    nBVal=24
    nDVal=8
    B::Fun
    nBVal=12
    /*
    001:看上去像多态
    */
    
    #include <iostream>
    using namespace std;
    class B {
    private:
        int nBVal;
    public:
        void Print()
        {
            cout << "nBVal=" << nBVal << endl;
        }
        void Fun()
        {
            cout << "B::Fun" << endl;
        }
        B(int n) { nBVal = n; }
    };
    // 在此处补充你的代码
    class D :public B
    {
    private:
        int nDVal;
    public:
        void Print()
        {
            B::Print();
            cout << "nDVal=" << nDVal << endl;
        }
        void Fun()
        {
            cout<< "D::Fun" << endl;
        }
        D(int n) :B(3*n)
        {
            nDVal = n;
        }
    };
    int main() {
        B * pb; D * pd;
        D d(4); 
        d.Fun(); // D::Fun
        pb = new B(2); 
        pd = new D(8);
        pb->Fun(); //B::Fun
        pd->Fun(); //D::Fun
        pb->Print(); //nBVal=2
        pd->Print(); //
        pb = &d; 
        pb->Fun();//B::Fun
        pb->Print();//nBVal=12
        while (1);
        return 0;
    }

    002:Fun和Do

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    程序填空输出指定结果

    #include <iostream> 
    using namespace std;
    class A { 
    	private: 
    	int nVal; 
    	public: 
    	void Fun() 
    	{ cout << "A::Fun" << endl; }; 
    	void Do() 
    	{ cout << "A::Do" << endl; } 
    }; 
    class B:public A { 
    	public: 
    	virtual void Do() 
    	{ cout << "B::Do" << endl;} 
    }; 
    class C:public B { 
    	public: 
    	void Do( ) 
    	{ cout <<"C::Do"<<endl; } 
    	void Fun() 
    	{ cout << "C::Fun" << endl; } 
    }; 
    void Call(
    // 在此处补充你的代码
    ) { 
    	p.Fun(); p.Do(); 
    } 
    int main() { 
    	C c; 
    	Call( c); 
    	return 0;
    }
    输入
    输出
    A::Fun 
    C::Do
    样例输入
    None
    样例输出
    A::Fun 
    C::Do 


    /*
    002:Fun和Do
    */
    
    #include <iostream> 
    using namespace std;
    class A {
    private:
        int nVal;
    public:
        void Fun()
        {
            cout << "A::Fun" << endl;
        };
        void Do()
        {
            cout << "A::Do" << endl;
        }
    };
    class B :public A {
    public:
        virtual void Do()
        {
            cout << "B::Do" << endl;
        }
    };
    class C :public B {
    public:
        void Do()
        {
            cout << "C::Do" << endl;
        }
        void Fun()
        {
            cout << "C::Fun" << endl;
        }
    };
    void Call(B &p
        // 在此处补充你的代码
    ) {
        p.Fun(); p.Do();
    }
    int main() {
        C c;
        Call(c);
        while (1);
        return 0;
    }

    003:这是什么鬼delete

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    程序填空输出指定结果

    #include <iostream> 
    using namespace std;
    class A 
    { 
    public:
    	A() { }
    // 在此处补充你的代码
    }; 
    class B:public A { 
    	public: 
    	~B() { cout << "destructor B" << endl; } 
    }; 
    int main() 
    { 
    	A * pa; 
    	pa = new B; 
    	delete pa; 
    	return 0;
    }
    输入
    输出
    destructor B
    destructor A
    样例输入
    样例输出
    destructor B
    destructor A

    /*
    003:这是什么鬼delete
    */
    
    #if 1
    #include <iostream> 
    using namespace std;
    class A
    {
    public:
        A() { }
    
        // 在此处补充你的代码
        virtual ~A()// 虚析构函数,先析构派生类, 再析构基类
        {
            cout << "desturctor A" << endl;
        }
    };
    class B :public A {
    public:
        ~B() { cout << "destructor B" << endl; }
    };
    int main()
    {
        A * pa;
        pa = new B;
        delete pa; // destructor B  desturctor A
        return 0;
    }
    #endif

    004:怎么又是Fun和Do

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述

    程序填空输出指定结果

    #include <iostream>
    using namespace std;
    class A {
    	private:
    	int nVal;
    	public:
    	void Fun()
    	{ cout << "A::Fun" << endl; };
    	virtual void Do()
    	{ cout << "A::Do" << endl; }
    };
    class B:public A {
    	public:
    	virtual void Do()
    	{ cout << "B::Do" << endl;}
    };
    class C:public B {
    	public:
    	void Do( )
    	{ cout <<"C::Do"<<endl; }
    	void Fun()
    	{ cout << "C::Fun" << endl; }
    };
    void Call(
    // 在此处补充你的代码
    ) {
    	p->Fun(); p->Do();
    }
    int main() {
    	Call( new A());
    	Call( new C());
    	return 0;
    }
    输入
    输出
    A::Fun
    A::Do
    A::Fun
    C::Do
    样例输入
    样例输出
    A::Fun
    A::Do
    A::Fun
    C::Do
    
    来源
    /*
    004:怎么又是Fun和Do
    */
    
    #include <iostream>
    using namespace std;
    class A {
    private:
        int nVal;
    public:
        void Fun()
        {
            cout << "A::Fun" << endl;
        };
        virtual void Do()
        {
            cout << "A::Do" << endl;
        }
    };
    class B :public A {
    public:
        virtual void Do()
        {
            cout << "B::Do" << endl;
        }
    };
    class C :public B {
    public:
        void Do()
        {
            cout << "C::Do" << endl;
        }
        void Fun()
        {
            cout << "C::Fun" << endl;
        }
    };
    void Call(A* p
        // 在此处补充你的代码
    ) {
        p->Fun(); p->Do();
    }
    int main() {
        Call(new A());
        Call(new C());
        return 0;
    }
  • 相关阅读:
    洛谷【P1177】【模板】归并排序
    洛谷【P1177】【模板】快速排序
    洛谷【P1104】生日(冒泡排序版)
    洛谷【P1104】生日(插入排序版)
    洛谷【P1104】生日(选择排序版)
    BZOJ5443:[CEOI2018]Lottery
    ReactNative---ref的用法和技巧
    ios---运用MJRefresh组件设置下拉刷新
    ReactNative---setState与性能的平衡
    ios---设置UITabBarController的字体颜色和大小
  • 原文地址:https://www.cnblogs.com/focus-z/p/11100244.html
Copyright © 2011-2022 走看看