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

来源:互联网 发布:代理地址和端口 编辑:程序博客网 时间:2024/05/17 06:06

    博主想到写博客来写学习笔记时书已经看到第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