组合与继承

来源:互联网 发布:阿里云新注册 编辑:程序博客网 时间:2024/05/22 08:54

1.当父类没有默认构造函数时,子类必须在初始化成员列表里面显示调用构造函数

    class Vehicle {        int xx;    public:        Vehicle(int x) :xx(x){}        int getValue() {            return xx;        }    };    class Car :public Vehicle {    public:        Car(int x) :Vehicle(x) {};    };

2.子类里面构造函数、拷贝构造函数、赋值号。
关于父类的赋值。

    class Traveler {        string trv;    public:        explicit Traveler(string st) :trv(st) {            cout << "constructor Traveler" << endl;        };        Traveler(Traveler &tr) {            trv = tr.trv;        }        Traveler& operator=(const Traveler& tr) {            if (this != &tr) {                this->trv = tr.trv;            }            cout << "Traveler =" << endl;            return *this;        }    };    class Pager {        string pag;    public:        explicit Pager(string pa) :pag(pa) {            cout << "constructor Pager" << endl;        };        Pager(Pager& p) {            pag = p.pag;        }        Pager& operator=(const Pager& pa) {            if (this != &pa) {                this->pag = pa.pag;            }            cout << "Pager =" << endl;            return *this;        }    };    class BussinessTraveler :public Traveler {        Pager pager;    public:        BussinessTraveler():Traveler("default"),pager("default"){        }        BussinessTraveler(string tr,string pa):Traveler(tr),pager(pa){}        BussinessTraveler(BussinessTraveler& buTr):Traveler(buTr),pager(buTr.pager){        }        BussinessTraveler& operator=(BussinessTraveler& bs) {            if(this!=&bs){                Traveler::operator=(bs);                this->pager = bs.pager;            }            return *this;        }    };

拷贝构造函数在初始化列表里面,显示的调用父类的拷贝构造函数
赋值号,用Base::operator=(bs) 显示调用

3.名字隐藏对静态成员函数来说也是成立的。
另外在类里也不能仅用返回值来重载函数

4.private protect形式的派生类 像基类转换,编译器报错:
提示转换方式存在但无法访问!
protect派生类也不能访问基类的public的函数

原创粉丝点击