继承和组合的分析

来源:互联网 发布:移动数据流量可以用吗 编辑:程序博客网 时间:2024/05/29 16:54
// test.cpp : 定义控制台应用程序的入口点。/*总结:继承就是隐含的将父类在派生类中再次定义,很像组合。添加保护、私有权限**无外乎为父类定义的“成员”添加了一个保护壳,相当于该父类成了私有或保护“成员”,**但组合无法修改类内部结构,但继承可以重写父类的方法,严格上说继承只是接口的复用*/#include "stdafx.h"#include <iostream>using namespace std;class X{int i;//私有protected:int a;//保护public://公有X(){i = 0;}void seti(int a){i = a;}int geti(){return i;}};class Y :  protected X//保护继承,相当于定义了一个保护X成员{int i;//私有protected:int a;//保护public:Y(){};void seti(int a){X::seti(a);}//int geti(){return X::i;}//由于X的i是私有的只有自己能用int geta(){return X::a;}//由于X的a是保护的自己和孩子能用};class Z :  private X//私有继承,相当于定义了一个私有X成员{public:Z(){};void seti(int a){X::seti(a);}//int geti(){return X::i;}//由于X的i是私有的只有自己能用int geta(){return X::a;}//由于X的i是保护的孩子也能用};class E   //组合{public:E(){};private:X x;};int _tmain(int argc, _TCHAR* argv[]){X x;Y y;Z z;E e;//x大小为8,y大小为16,说明y包含xcout << sizeof(x) << "::" <<sizeof(y) << "::" <<sizeof(e)<< endl;//y.geti(); //实际使用的保护的x的geti方法//z.geti(); //实际使用的私有的x的geti方法//e.x.geti();//私有成员,这里和私有继承很相似吧system("pause");return 0;}

0 0
原创粉丝点击