标签:string 派生类 c++ 第五次 实验 virtual MachinePets 基类 cpp
part 1
两个问题:
1、派生类中出现与基类同名成员,通过对象名.成员名的方式,即代码中base2.display(),访问的成员是派生类中的成员
2、通过基类指针访问派生类对象时,在ex1_1.cpp中没有virtual,得到的结果全是基类成员函数的调用,在ex1_2.cpp中基类成员函数有virtual,结果基类派生类都依次调用。虚函数是动态捆绑基础,本质是覆盖不是重载。
Part 3
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 5 class MachinePets 6 { 7 public: 8 MachinePets(const string s); 9 MachinePets(); 10 string getNickname(); 11 virtual string talk() = 0; 12 virtual ~MachinePets(); 13 private: 14 string nickname; 15 }; 16 17 void play(MachinePets *p) 18 { 19 cout << p->getNickname(); 20 cout << p->talk() << endl; 21 } 22 23 MachinePets::MachinePets(const string s) :nickname(s) 24 { 25 } 26 27 28 string MachinePets::getNickname() 29 { 30 return nickname; 31 } 32 33 MachinePets::~MachinePets() 34 { 35 } 36 37 38 39 40 41 42 class PetCats :public MachinePets 43 { 44 public: 45 PetCats(const string s); 46 ~PetCats(); 47 string talk(); 48 }; 49 50 PetCats::PetCats(const string s) :MachinePets(s) 51 { 52 } 53 string PetCats::talk() 54 { 55 return " says miao wu~"; 56 } 57 PetCats::~PetCats() 58 { 59 } 60 61 62 63 64 65 class PetDogs :public MachinePets 66 { 67 public: 68 PetDogs(const string s); 69 ~PetDogs(); 70 string talk(); 71 }; 72 73 PetDogs::PetDogs(const string s) :MachinePets(s) 74 { 75 } 76 string PetDogs::talk() 77 { 78 return " says wang wang~"; 79 } 80 PetDogs::~PetDogs() 81 { 82 } 83 84 85 86 int main() { 87 PetCats cat("miku"); 88 PetDogs dog("da huang"); 89 play(&cat); 90 play(&dog); 91 return 0; 92 }宠物
实践课上出现如下报错:
严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2005 "void __cdecl play(class MachinePets *)" (?play@@YAXPAVMachinePets@@@Z) 已经在 MachinePets.obj 中定义 part3 C:\Users\lenovo\Desktop\part3\part3\PetDogs.obj 1
从网上查的原因是:c++在写模版函数时(template<class T>之类的),头文件不能与cpp文件分离。这就意味着,你头文件定义的含模版的地方必须在头文件中实现,没用模版定义的地方可以放在cpp中实现。(还有一个告诉我要重新安装)
不是很明白,总是觉着应该新开一个都写一块儿,前几回分开写就没有出现这个问题。结果编译成功。
标签:string,派生类,c++,第五次,实验,virtual,MachinePets,基类,cpp 来源: https://www.cnblogs.com/lovecpp/p/10937037.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。