第十三周 程序阅读一

来源:互联网 发布:tostring方法的作用js 编辑:程序博客网 时间:2024/05/21 07:09

(1)虚函数:

问题及代码:

#include<iostream>using namespace std;class A {int a;public:   A():a(5){}   virtual void print()const { cout<<a;}};class B: public A {   char b;public:    B() { b='E'; }    void print() const { cout<<b; }};void show(A &x) { x.print(); }int main(){   A d1,*p;   B d2;   p=&d2;   d1.print();   d2.print();   p->print();   show(d1);   show(d2);   return 0;}

运行结果:

总结:在最后输出的E,是因为,实参是类B的对象,调用d1.print();函数,输出的即为E。

(2)虚析构函数:

问题及代码:

#include <iostream>using namespace std;class BASE{private:    char c;public:    BASE(char n):c(n) {}    virtual ~BASE() { cout<<c; }};class DERIVED:public BASE{private:    char c;public:    DERIVED(char n):BASE(n+1),c(n) {}    ~DERIVED(){ cout<<c; }};int main(){    DERIVED d('X');    return 0;}

运行结果:

(3)纯虚函数:

问题及代码:

#include <iostream>using namespace std;class Base{public:    virtual void Who() =0;};class FirstDerived:public Base{public:    void Who() { cout<<"F"; }};class SecondDerived:public Base{public:    void Who() { cout<<"S"; }};int main(){    FirstDerived first_obj;    SecondDerived second_obj;    Base &bref=first_obj;    bref.Who();    bref=second_obj;    bref.Who();    Base *bp;    bp=&first_obj;    bp->Who();    bp=&second_obj;    bp->Who();    return 0;}

运行结果:

总结:Base &bref=first_obj;      bref.Who();    bref=second_obj;    bref.Who();这四行代码中,输出的是FF,其实是不明白的,但是问了好多人还是没解决。引用不是和指针是一样的吗?书上说“在声明一个引用后,不能再使之作为另一变量的引用”这是不合法的,但是运行是没有错误的啊

搞不明白·

 

六月三号:今天贺老师亲自找我,给我讲了这个题,本来是想放弃了。因为看了老师发的视频后,自己还是不明白,小伙伴说,不用纠结,先放一放,所以上机课,也就没打算问,想放弃这个题了,但是贺老师竟然亲自过来问我会了吗?感觉挺不好意思的,老师都没有放弃我,我又有什么理由放弃。放弃这道题,加油吧,多问问题,不是什么丢人的事,因为就是学的不好,所以才要更谦虚的问啊!!

以下是对这道题的补充:代码:

#include <iostream>using namespace std;class Base{protected:    char aa;public:    Base(char a)    {        aa=a;    }    virtual void Who() =0;    virtual void Where() =0;};class FirstDerived:public Base{private:    char bb;public:    FirstDerived(char a,char b):Base(a)    {        bb=b;    }    void Who() { cout<<"F"; }    void Where(){cout<<bb<<aa;}};class SecondDerived:public Base{    private:    char cc;public:    SecondDerived(char a,char c):Base(a)    {        cc=c;    }    void Who() { cout<<"S"; }    void Where(){cout<<cc<<aa;}};int main(){    FirstDerived first_obj('b','d');    SecondDerived second_obj('c','e');    Base &bref=first_obj;    bref.Who();    bref.Where();    bref=second_obj;    bref.Who();    bref.Where();    Base *bp;    bp=&first_obj;    bp->Who();    bp=&second_obj;    bp->Who();    return 0;}


运行结果:

 

总结:引用数据改变,引用对象未改变。

0 0
原创粉丝点击