特基础特基础的东西随便写写

以下代码是某视频课后练习题

#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){使用指针,不创建对象}

猜你喜欢

转载自blog.csdn.net/sinat_39028599/article/details/73928013