以下代码是某视频课后练习题
#include <iostream>
#include <stdlib.h>
#include <string>
using namespace std;
/**
* 定义人类: Person
* 数据成员: m_strName
* 成员函数: attack()
*/
class Person
{
public:
string m_strName;
void attack()
{
cout << "attack" << endl;
}
};
/**
* 定义士兵类: Soldier
* 士兵类公有继承人类
* 数据成员: m_strName
* 成员函数: attack()
*/
class Soldier:public Person
{
public:
string m_strName;
void attack()
{
cout << "fire!!!" << endl;
}
};
int main(void)
{
// 实例士兵对象
Soldier s;
// 向士兵属性赋值"tomato"
s.m_strName = "tomato";
// 通过士兵对象向人类属性赋值"Jim"
s.Person::m_strName = "Jim";
// 打印士兵对象的属性值
cout << s.m_strName << endl;
// 通过士兵对象打印人类属性值
cout << s.Person::m_strName << endl;
// 调用士兵对象方法
s.attack();
// 通过士兵对象调用人类方法
s.Person::attack();
return 0;
}
记录下在视频里学到的还算重要的东西
#include "Person.h" //计算机会在程序的目录下去寻找此文件,各种新建的.cpp .h 都在程序的同目录下,
#include <Person.h> //计算机会搜索程序的默认库,即微软提供的一整套库的框架
#include <stdlib.h> //右击,打开文档<>,就能打开库了。。。顺便找出存储位置
以下是大概只有本人能看懂的乱码笔记了
soldier.play(); soldier.Person::play();因为被隐藏
继承下来的函数名相同的函数,不能形成重载,只能发生隐藏
isA Soldier s1; Person p1; Person *p2 = &s1; yes
s1 = p1; Soldier *s2 = &p1; no
void fun1(Person *p){} void fun2(Person &p){}
int main{Person p1; Soldier s1; fun1(&p1); fun2(p1); fun1(&s1); fun2(s2);
Person *p = new Soldier; delete p;
执行了: Person() Soldier() ~Person() 存在内存泄漏
所以,要virtual~Person() 然后,~Soldier()即使不加virtual也是虚函数
fun(Person p){创建临时对象Person ....code.... 销毁临时对象Person}
fun(Person &p){使用别名,不创建对象}
fun(Person *p){使用指针,不创建对象}