C++ Primer-学习笔记#1 第14章_C++中的代码重用

    博主想到写博客来写学习笔记时书已经看到第14章了,那今后的学习笔记都从C++ Primer(中文 第五版)第14章开始记录。

    “学生是什么?入学者?参加研究的人?残酷现实社会的避难者?有姓名和一系列考试分数的人?“为何读到这句还是想笑....

    回到正题,以下记录为我认为有必要记录或记忆的东西。

    私有继承中,在不进行显示类型转换的情况下,不能将派生类的引用或指针賦给基类引用或指针。即私有继承在何处都不能使用隐式向上转换,而保护继承可在派生类内使用隐式向上转换,公有继承则能在类内外都可使用隐式向上转换。这是C++Primer中的写明的,不过博主对这点有疑惑就写了代码进行测试:

#include <iostream>
using std::cout;
using std::endl;
class base_test_class
{
public:
        int inta;
        base_test_class() { inta = 0; }
};
class test_class:public base_test_class
{
public:
        void test_class_func1(base_test_class * p) { };
        void test_class_func2(test_class * p); 
};
void test_class::test_class_func2(test_class * p)
{
        base_test_class * pb = p;
        cout << pb->inta << endl;
}
int main()
{
        base_test_class * pa = new test_class;  // #1
        test_class * pb = new test_class;
        pb->test_class_func1(pb);                       // #2
        pb->test_class_func2(pb);
        return 0;
}
    使用公有继承时,以上代码将编译通过,但使用保护继承protected和私有继承private编译时将报错,错误相同:

test601.cpp: 在函数‘int main()’中:
test601.cpp:23:36: 错误: ‘base_test_class’是‘test_class’不可访问的基类
test601.cpp:25:32: 错误: ‘base_test_class’是‘test_class’不可访问的基类

    将代码#1、#2两句注释后,编译将通过。即在私有继承派生类内也可以像保护继承一样使用隐式向上转换,这点和C++Primer中说的不同,推测可能是编译器更新后的改动。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值