已采纳回答 / 慕圣2268672
还是用person和soldier打比方,*p=&s是对的,因为士兵肯定是人,但*s=&p编译器就会提示错误,因为人不一定就是士兵,这么说应该好理解吧!
2017-07-09
已采纳回答 / pp_pcz
#ifndef 是判断有没有定义后面的那个宏,如果没有就进行后面的宏定义并且定义相应的类或其他,有的话就不进行下面的定义,这样可以避免在多个文件引入头文件时造成的重复定义。
2017-05-01
已采纳回答 / 书之诗ae
你的Worker继承的是一个抽象类,继承后就把派生类也变成抽象类了,解决方法:派生类的void Worker::work()改成void Worker::worker();或者把抽象类的Person的virtual void worker()=0改成virtual void work()=0;就可以解决啦。望采纳!
2017-04-18
已采纳回答 / 韩尛靖
private: int m_iAge();你定义的是一个成员函数;调用的时候却当成成员变量使用。应该把那个括号去掉就可以了。 private: int m_iAge;
2017-03-31
已采纳回答 / qq___思念不破海丶_1
本质上所有的操作系统都是一个死循环,不停的接收以及响应用户的处理和给予反馈真正的问题在于要分析清楚你所需要的所有资源的生命周期,包括内存的申请和释放,外设的创建和销毁等等。只要是你申请的资源,你必须确认他能够及时正确的得到销毁。还有一点是既然死循环必须要考虑何时和怎样释放CPU,例如利用信号量等待将当前任务/进程挂起,或者简单的利用wait/sleep之类函数主动释放。
2017-03-24
已采纳回答 / 慕仔5649330
写到基类,只是将直接include iostream 变成通过include 基类头文件间接include iostream,有时这样反而造成更多的空间浪费,比如你有一个.cpp可能只需要用到iostream头文件中的东西,而不需要基类头文件中的东西,你这时候包含基类头文件反而是浪费,所以包含头文件尽量不要传递,即通过include某个头文件而include另一些头文件
2017-03-23
已采纳回答 / YX4387299
如果在基类已经有virtual关键字的前提下,派生类需要加virtual关键字才通过的话,很有可能就是编译器的问题了,不同的编译器可兼容和扩展性能不同,就像有些编译器直接main(){}(不用int关键字)都可以编译,建议更新一下IDE试试
2017-02-15
已采纳回答 / 范更
因为,内存中有程序代码区,堆区,栈区,全局区(静态区),文字常量区。在定义一个类时,它的成员函数,虚构函数,构造函数就被存入程序代码区,供所有对象调用。在实例化一个类的对象时,并没有拷贝类的函数,仅仅存入了数据成员,因此类的对象中有数据成员,然而当用父类的指针指向子类的对象时,调用同名函数时会调用父类的同名函数,当想要调用子类的同名函数引入了虚函数,当调用普通成员函数时,计算机可以在代码区识别该函数,无需用函数指针,因而,在对象中只有数据成员的大小。
2017-02-12
已采纳回答 / qq_梵蒂冈_1
基类实例化对象不能赋值给派生类的实例化对象(引用也不可以),只能用派生类的对象去赋值或初始化基类的对象,和用基类的指针指向派生类。如:worker wo;person per;worker &wor=wo;person *p=&wo;*p=wor;per=wor;
2017-01-03