C++ 代码重用

一,包含

类的数据成员是另一个类对象,下面定义一个Student类包含string类型的数据成员:

class Student{
private:
    string name;
public:
    Student():name("default"){}
    Student(const string &name):name(name){}
};
 
二,使用包含的特点

1,包含实现的是has-a关系。

2,Student类的成员函数可以使用string类的公有接口来访问与修改name对象,但是在类的外面不能使用string类的接口。对于这种情况,通常描述为Student类获得了其成员对象的实现,但没有继承接口。

3,使用公有继承时,类可以继承接口,可能还有实现(基类的纯虚函数提供接口,但不提供实现)。获得接口是is-a关系的组成部分。而使用组合类可以获得实现,但是不能获得接口。不继承接口是has-a关系的组成部分。


三,私有继承

C++还有另外一种实现has-a关系的途径--私有继承。使用私有继承,基类的公有成员函数与保护成员函数都将成为派生类的私有成员函数。这意味着基类方法将不会成为派生类对象公有接口的一部分,但可以在派生类的成员函数中使用它们。总之,私有继承中派生类不继承基类的接口。


四,在私有继承中访问基类对象

class Person{
private:
    string name;
public:
    Person():name(""){}
    Person(string name):name(name){}
    void show(){
        cout<<"Person"<<endl;
    }
};

class Student : private Person{
private:
    string number;
public:
    Student():number(""){}
    Student(string &name, string &number):Person(name), number(number){}
    void show(){
        cout<<"Student"<<endl;
    }
    Person &man(){
        return (Person &)*this;
    }
};

注意:

引用Student不会自动转换为Person引用。根本原因在于,在私有继承中,未进行显示类型转换的派生类引用或指针,无法赋给基类的引用或指针。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值