子类中通过父类的类名作用域调用父类的protected成员变量 是不可以的
子类中通过父类的对象调用父类的protected成员变量 是不可以的
子类中直接用父类的protected成员变量是可以的
如:
class Base//基类
{
public:
Base(int b):b_(b){}
protected:
int b_;
}
class Derived : public Base//子类
{
public:
void Test()
{
A a(1);
a.b_ = 100; //error C2248: “A::b_”: 无法访问 protected 成员(在“A”类中声明)
A::b_ = 100; //error C2597: 对非静态成员“A::b_”的非法引用
b_ = 100; //正确通过
}
}
那么谁能帮我解释以下 这两个报错的详细原因是什么
protected的成员变量在本类和其子类可以直接用,当用父类对象,在父类外以及其子类外调用其protected成员时报错我理解,但是父类对象在其子类中调用父类中的protected成员变量也不行是为什么呢。
上面代码有误。。 A就是Base B就是Derived
啊对写错。。A就是Base B就是Derived
追答你这种写法是相互矛盾的,本来基类的受保护成员只能被其派生类访问,而你现在又再次在派生类里定义一个基类,然后调用受保护的成员数据。那样编译器肯定是会报错的,因为你这样做相当于在非派生类里调用受保护的成员数据。
追问恕我愚钝。。再次在派生类里定义一个基类,然后调用受保护的成员数据。编译器为什么会报错捏
追答这大概是C++或编译器规定的吧,因为派生类已从父类继承了受保护的成员b_,那么,此时b_可供在派生类的所有成员函数使用,此时Test函数,声明了基类的对象且调用了一个同名的b_,那么,此时编译器怎么来维护它呢?因为两个b_当中仅有一个是从基类继承下来并且是受保护的。我想编译器不会做这种事,即不可能在编译时同时维护两个受保护的成员数据。
追问唔赶脚有道理,只是不懂如果是这样他报错为什么不是重定义之类的而是不同的两种
c++中子类能否修改父类的保护成员变量
子类的成员函数可以访问父类的保护成员,对象不可以,就连父类自己的对象都不可以访问保护成员。
C++中子类可以直接调用父类实现的函数吗?比如: class A{ public: void...
第一种写法可以,不过得用最新的编译器(如: GCC 4.8、Visual C++ 2013)。这说明带返回值函数的函数调用除了可以位于函数体内,也还可以用于在非函数作用域初始化变量。你的第二种也是可以的。给你截个图:代码:结果:
C++类的访问修饰符public、protected 和 private
对于protected成员,子类可以访问,但不允许修改,这是因为保护成员是为了让子类继承父类的功能,同时允许子类对特定部分进行自定义。公共成员则允许外部和内部自由访问,但通常只用于对外提供服务,隐藏了实现细节。为了允许外部访问私有成员,可以采用友元函数的机制。友元函数可以访问类的私有和受保护成员,但...
C++ 用子类定义的对象 怎么调用父类的成员函数?
不一定,要按继承方式分三种情况讨论。public继承:可以调用基类中被protected和public修饰的成员变量与成员函数。protected继承:可以调用基类中被public修饰的成员变量与成员函数。private继承:不可以调用基类中任何成员变量与成员函数。
c++子类访问父类私有成员
一般好的项目,代码风格,设置成private的成员变量,不应该直接访问它的,最好为Circle::r写个成员函数,就可以间接访问了。比如 int Circle::Getr(){ return r } 另外,如果你非要不该父类的情况下访问,也是可以的,比如用类的成员指针,具体使用不好理解,风格不好。
c++的protected修饰符只能在类体里面访问而不能在外面访问吗??C++的...
以public继承父类属性为protected的成员,子类成员可以访问!注意这里描述的都是类!并不是对象,对象是不能直接访问的!就算是父类自己也无法通过对象直接访问protected成员,类是一个抽象概念,对象是类的实例。这两者是有区别的!
C++中子类可以直接调用父类实现的函数吗
子类能不能调用父类的函数与继承方式有关,C++有三种继承方式:1.公用继承(public):对于基类成员在派生类中保持自己原来的的访问级别,原来是public(private\/ protected),在派生类中也还是public(private\/protected)。2.受保护继承(protected):基类中的public成员和protected成员在派生类中为protected,...
C++中,基类中的private跟protected成员权限上有什么区别?
public成员可以在基类访问也可以在子类访问,还可以使用基类和子类的对象访问。protect成员可以在基类访问也可以在子类访问,不能使用对象访问。private成员只能在基类中访问,不能再子类访问,不能使用对象访问。以上基于public派生,否则基类的public成员在子类如果不再是public成员,则不能使用子类的对象访问。...
C++ 子类怎么访问父类私有数据?
私有的秘密parent、son都不能访问,只有friend才能访问。在父类前声明子类,在父类中将子类作为友元类 class son;class parent{friend class son;\/* ... *\/};class son: public parent{\/* ... *\/};
c++中,public继承,如何在子类中使用 private 成员,不是说private不能被...
C++中成员变量有三个限定级别:private,protected,public。private只能是在自身类中能调用,例如:sub是一个继承父类father的子类,sub类中定义的函数是不能直接访问father类中的私有成员的。如果想要访问,就要把父类中的成员用protected限定。protected限定符声明的变量,就是允许继承的子类可以直接访问。