鱼C论坛

 找回密码
 立即注册
查看: 1623|回复: 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保护起来的对象不能进行访问吗?

#include<iostream>

class Stack
{
public:
        Stack(unsigned int size = 100)
        {
                this->size = size;
                sp = 0;
                data = new int[size];
        }

        Stack(Stack &rhs)
        {
                *this = rhs;
        }

        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;
        }

        void push(int value) 
        {
                data[sp++] = value;
        }
        
        int pop() 
        {
                return data[--sp];
        }

        ~Stack()
        {
                delete []data;
        }

protected:
        unsigned int size;
        unsigned int sp;
        int *data;
};

void main()
{
        Stack stack1;
        stack1.push(1);
        stack1.push(2);

        Stack stack2 = stack1;
        std::cout << stack2.pop();
}
最佳答案
2017-7-7 16:48:42
在类里面当然可以使用,即使是你将其属性改为private也可以被直接调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

谢谢啦,就是一个类里面的方法引用传递同一个类,然后就可以用调用那个类里的保护成员了吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-28 08:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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