c++多态多实例

#include <bits/stdc++.h>
using namespace std; class A { public: A() { cout << "构造A" << endl; s = new char[20]; memset(s, 0, 20); strcpy(s, "hahaha"); } virtual ~A() { cout << "析构A" << endl; delete []s; } virtual void print() { cout << s << endl; } private: char *s; }; class B :  public A { public: B() { cout << "构造B" << endl; s = new char[20]; memset(s, 0, 20); strcpy(s, "BBBBB"); } virtual ~B() { cout << "析构B" << endl; delete []s; } virtual void print() { cout << s << endl; } private: char *s; }; void ok(A *obj) { obj->print(); } void okk(A obj) { obj.print(); }

1.c++

int main() { B *b = new B; A *obj = b; obj->print(); delete b; /*构造A 构造B BBBBB 析构B 析构A*/ }

2.函数

int main() { B *b = new B; A *obj = b; obj->print(); delete obj; /*构造A 构造B BBBBB 析构A*/ }

3.布局

int main() { B b; A a = b; A *pa = &b; a.print();//这里的a就是一个A类型的变量,它的内存布局在赋值的时候已经从B转换到A了,多于的数据都被丢弃,所以其就是一个A类型的变量。
    pa->print();//其是一个指针,其类型虽然是A,但指向的区域的内容倒是一个B类型的内存结构,虽然内存结果的布局与A兼容,但其虚函数表中的Test倒是B的实现

    /*构造A 构造B hahaha BBBBB 析构A 析构B 析构A*/ }

4.spa

int main() { B *b = new B; ok(b); /*构造A 构造B BBBBB*/ }

5.指针

int main() { B *b = new B; ok(b); delete b; /*构造A 构造B BBBBB 析构B 析构A*/ }

6.code

int main() { B b; okk(b); /*构造A 构造B hahaha 析构A 析构B 析构A*/ }

7.对象

int main() { B *b = new B; A a; b = &a; //报错,不能让子类指针指向父对象
 ok(b); }
相关文章
相关标签/搜索