鱼C论坛

 找回密码
 立即注册
查看: 1703|回复: 2

[已解决]C++ protected的问题

[复制链接]
发表于 2017-7-7 11:28:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
就是我写的一个栈的副本构造器和=重载中
Stack &operator= (Stack &rhs)
        {
                if(this != &rhs)
                {
                        this->data = new int[size];
                        unsigned temsp = rhs.sp;        //保存rhs的栈指针sp
                        while(rhs.sp > 0)
                        {
                                data[rhs.sp] = rhs.pop();
                        }
                        this->sp = temsp;
                        this->size = rhs.size;
                        rhs.sp = temsp;
                }
                else
                {
                        std::cout << "相同的两个类\n";
                }
                return *this;
        }

rhs.sp是protected里面的,但是为什么我下断看还可以赋值给rhs.sp呢
不是说protected保护起来的对象不能进行访问吗?


  1. #include<iostream>

  2. class Stack
  3. {
  4. public:
  5.         Stack(unsigned int size = 100)
  6.         {
  7.                 this->size = size;
  8.                 sp = 0;
  9.                 data = new int[size];
  10.         }

  11.         Stack(Stack &rhs)
  12.         {
  13.                 *this = rhs;
  14.         }

  15.         Stack &operator= (Stack &rhs)
  16.         {
  17.                 if(this != &rhs)
  18.                 {
  19.                         this->data = new int[size];
  20.                         unsigned temsp = rhs.sp;        //保存rhs的栈指针sp
  21.                         while(rhs.sp > 0)
  22.                         {
  23.                                 data[rhs.sp] = rhs.pop();
  24.                         }
  25.                         this->sp = temsp;
  26.                         this->size = rhs.size;
  27.                         rhs.sp = temsp;
  28.                 }
  29.                 else
  30.                 {
  31.                         std::cout << "相同的两个类\n";
  32.                 }
  33.                 return *this;
  34.         }

  35.         void push(int value)
  36.         {
  37.                 data[sp++] = value;
  38.         }
  39.        
  40.         int pop()
  41.         {
  42.                 return data[--sp];
  43.         }

  44.         ~Stack()
  45.         {
  46.                 delete []data;
  47.         }

  48. protected:
  49.         unsigned int size;
  50.         unsigned int sp;
  51.         int *data;
  52. };

  53. void main()
  54. {
  55.         Stack stack1;
  56.         stack1.push(1);
  57.         stack1.push(2);

  58.         Stack stack2 = stack1;
  59.         std::cout << stack2.pop();
  60. }
复制代码
最佳答案
2017-7-7 16:48:42
在类里面当然可以使用,即使是你将其属性改为private也可以被直接调用
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-7 16:48:42 | 显示全部楼层    本楼为最佳答案   
在类里面当然可以使用,即使是你将其属性改为private也可以被直接调用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-7 17:08:14 | 显示全部楼层
BngThea 发表于 2017-7-7 16:48
在类里面当然可以使用,即使是你将其属性改为private也可以被直接调用

谢谢啦,就是一个类里面的方法引用传递同一个类,然后就可以用调用那个类里的保护成员了吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-19 21:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表