已采纳回答 / weixin_慕村4306521
circle的类定义内,构造函数内coordinate *m_p=new coordinate(3,5);与数据成员中coordinate *m_p;矛盾,不妨改为如下,这样随着对象的解构,自动进行coordinate的析构函数class circle:public shape{public:circle(double r):m_p(3,5){m_r=r;cout<<"circle"<<endl;}virtual ~circle(){cout<<"~circle"<...
2020-02-28
已采纳回答 / 我入戲太深
因为throw抛出来的东西就是一个string类型的“除数不能为0"这个字符串。你的第一种写法catch(string),只要是抛出来的字符串都能够捕获到,但是你在打印的时候你只能通过【cout<<"除数不能为0"<<endl;】打印出来, 因为你没有一个指针来接受你字符串内容。而用catch(string &e),捕获的时候e会指向“除数不能为0”这个字符串的地址,因此在打印的时候只需要【cout<<e<<endl】;就可以把“除数不能为0”这句话...
2020-02-25
已采纳回答 / 小程序魔王
主要是可以优化代码,比如函数的参数类型可以写成父类Person,这样你传一个Farmer或Worker,函数都可以运行,但是如果你要是把函数的参数类型写成Farmer,那Worker就是类型不匹配,你还要再写一个参数类型为Worker的函数,也就是说你得写两个具有相同功能的函数,但是如果你把参数类型写成父类,那只需要写一个函数就可以了
2019-05-29
已采纳回答 / no4990
就算改成private都可以,这个老师用的指针p不是Circle类的指针,而是int指针,所以不受访问限定符的限定。你可以用下面的代码来看,p1是Circle类的指针,p2是int指针。<...code...>
2019-05-07
已采纳回答 / 慕圣1012934
不加是新在函数内新创建了一个临时变量,接收了throw传过来的值(1.1),如果加了&,就会把1.1的引用传过来,之后a就相当于1.1的别名,就不用重新创建临时变量,因为a就是throw那里的1.1,可以节省一些系统资源。
2019-03-10
已采纳回答 / DeceiverY
一个类同时被两个或以上的类继承时,在实例化子类的同时,会造成父类的多次定义即父类被重复定义;而宏定义就是为了解决类的重复定义,当实例化子类时,对父类的定义会通过宏定义做出判断,如果没有定义就可以直接定义,如果已经定义,就会跳过。
2019-03-05
已采纳回答 / DeceiverY
父类Car ,子类Bus,,,通过Car *p = new Bus;实例化对象后,其中的p为Car类型的指针,而*p则为Bus类型的对象,用p->所指向的就是子类的数据成员或者成员函数,而用p->Car::才为父类的
2019-03-05
已采纳回答 / 苏布达
父类指针指向子类对象,通过父类指针只能寻址到从父类继承到的成员函数与数据成员,子类扩展的将会被截断。但是,如果将父类中同名函数设置为虚函数,创建子类对象时将会创建子类自有的虚函数表,虚函数表指向的成员函数将覆盖父类中的同名函数。
2018-09-28