Cpp7 C++的多态实现 — 虚表
多态的实现原理
|
|
总结:
……
|
|
总结:
……#include "stdafx.h"
class Person
{
public:
int Age;
int Sex;
void Word()
{
printf("Person:Work");
}
};
class Teacher:public Person
{
public:
int Level;
};
int main()
{
Teacher t;
t.Age = -1; //合法但是不合理
t.Sex = 2;
t.Level = 3;
return 0;
}
为什么要隐藏数据成员
……#阿里云kali源
deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
deb http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free
deb-src http://mirrors.aliyun.com/kali-security kali-rolling/updates main contrib non-free
#中科大kali源
deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib
deb http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free
deb-src http://mirrors.ustc.edu.cn/kali-security kali-current/updates main contrib non-free
全局变量区
Person p;
栈
void Max() { Person p; }
堆 new
和 delete
//在堆中创建对象: Person* p = new Person(); //释放对象占用的内存 delete p;
……在头文件中只留下声明代码
Test.h
struct sclass
{
int x;
int y;
int Bigger(int x,int y);
int Max(int x,int y,int z);
};
Test.cpp
……struct Person
{
int age;
int sex;
};
struct Teacher
{
int age;
int sex;
int level;
int classId;
};
struct Teacher:Person
{
int level;
int classId;
};
总结:
1、什么是继承?
继承就是数据的复制
2、为什么要用继承?
减少重复代码的编写
3、Person 称为父类或者基类
#include "stdafx.h"
#include
struct Sclass {
int a;
int b;
int c;
int d;
Sclass()//构造函数
{
printf("观察这个函数 \n");
}
Sclass(int a,int b,int c,int d)//构造函数
{
this->a=a;
this->b=b;
this->c=c;
this->d=d;
printf("观察这个函数 2\n");
}
int Plus()
{
return a+b+c+d;
}
};
int main(int argc, char* argv[])
{
Sclass s;
Sclass s2(1,2,3,4);
return 0;
}
//反汇编:
Sclass s;
0040D408 lea ecx,[ebp-10h]
0040D40B call @ILT+5(Sclass::Sclass) (0040100a)
Sclass s2(1,2,3,4);
0040D770 push 4
0040D772 push 3
0040D774 push 2
0040D776 push 1
0040D778 lea ecx,[ebp-20h]
0040D77B call @ILT+10(Sclass::Sclass) (0040100f)
//观察发现,分配一个对象,构造函数 方法直接就会被调用
总结特点:
……预处理一般是指在程序源代码被转换为二进制代码之前,由预处理器对程序源代码文本进行处理,处理后的结果再由编译器进一步编译。
……struct Student
{
char name[10];
int score;
}
struct Node
{
Student Element;
Node* next;
}
每一个节点包含此节点信息和下一个节点的指针
……C++是对C的补充扩展,C原有的语法C++都支持,并在此基础上扩展了一些新的语法:
继承、封装、多态、模板等等