• 模板类继承-成员变量不可访问的问题


    在编写代码的时候,发现一个现象:

    1. 模板类从一个父模板类继承后,不能访问其内部的protected成员变量,提示:not declare;
    2. 普通类从一个父模板类继承后,可以访问其内部的protected成员变量,可正常编译和使用;

    对于第1个现象,如果想正常使用需要加上父模板类的域名; 

    下面上代码

    1. 模板类继承模板类
     1 #include <iostream>
     2 namespace test
     3 {
     4 template <typename T>
     5 class Base
     6 {
     7 public:
     8   void Show()
     9   {
    10     std::cout << "hello world1! Base. a = " << a << std::endl;
    11   }
    12 
    13 protected:
    14   int a = 0;
    15 };
    16 
    17 template <typename T>
    18 class Child : public Base<T>
    19 {
    20 public:
    21   void Show()
    22   {
    23     std::cout << "hello world1! Child. a = " << a << std::endl;
    24   }
    25 };
    26 } // namespace test
    27 
    28 int main()
    29 {
    30   test::Child<int> ch;
    31   ch.Show();
    32   std::cout << "main.
    ";
    33   return 0;
    34 }
    View Code

    运行结果:

    对成员变量a增加基类域名后编译通过:

    1. 普通类继承模板类
     1 #include <iostream>
     2 namespace test
     3 {
     4 template <typename T>
     5 class Base
     6 {
     7 public:
     8   void Show()
     9   {
    10     std::cout << "hello world1! Base. a = " << a << std::endl;
    11   }
    12 
    13 protected:
    14   int a = 0;
    15 };
    16 
    17 class A : public Base<int>
    18 {
    19 public:
    20   void Show()
    21   {
    22     std::cout << "hello world1! A. a = " << a << std::endl;
    23   }
    24 };
    25 } // namespace test
    26 
    27 int main()
    28 {
    29   test::A ch;
    30   ch.Show();
    31   std::cout << "main.
    ";
    32   return 0;
    33 }
    View Code

    运行结果:

  • 相关阅读:
    es6 简介
    npm 快速开发技巧
    css清除浮动方法
    mui 总结
    7种 JS 创建对象的经典方式
    JavaScript 的 this 原理
    使用定时器
    dom 操作及方法
    JavaScript的6种继承方式及其优缺点
    贪吃蛇游戏代码
  • 原文地址:https://www.cnblogs.com/guoliushui/p/12777707.html
Copyright © 2020-2023  润新知