通过protected,private继承的子类不能通过基类指针进行访问。
2010-05-29 20:17
369 查看
#include<iostream>
const double PI=3.1415926;
using namespace std;
class Shape
{
public:
Shape(double a ,double b):Area(a),Perimeter(b){}
virtual void Show () const = 0;
protected:
double Area,Perimeter;
static double sum;
};
class Circle:protected Shape
{
public:
Circle(double r):Shape(r*r*PI,2*r*PI),radius(r)
{
sum+=(r*r*PI);
}
void Show () const
{
cout<<"圆形的面积"<<Area<<"圆形的面积"<<Perimeter<<endl;
}
private:
double radius;
};
class Rectangle:protected Shape
{
public:
Rectangle(double a,double b):Shape(a*b,2*(a+b))
{
sum+=(a*b);
}
void Show () const
{
cout<<"矩形的面积"<<Area<<"矩形的面积"<<Perimeter<<endl;
}
private:
double a,b;
};
double Shape::sum=0;
int main()
{
Shape *A;
Circle B(30);
Rectangle C(30,50);
A =&B;
A->Show();
A=&C;
A->Show();
return 0;
}
学习虚函数,但碰到了意外问题,寻之,原来是protected和private的继承类不能通过基类指针对象访问。
因为基类的成员由于protected和private继承访问权限变成了protected和private,访问权限有限制了。
const double PI=3.1415926;
using namespace std;
class Shape
{
public:
Shape(double a ,double b):Area(a),Perimeter(b){}
virtual void Show () const = 0;
protected:
double Area,Perimeter;
static double sum;
};
class Circle:protected Shape
{
public:
Circle(double r):Shape(r*r*PI,2*r*PI),radius(r)
{
sum+=(r*r*PI);
}
void Show () const
{
cout<<"圆形的面积"<<Area<<"圆形的面积"<<Perimeter<<endl;
}
private:
double radius;
};
class Rectangle:protected Shape
{
public:
Rectangle(double a,double b):Shape(a*b,2*(a+b))
{
sum+=(a*b);
}
void Show () const
{
cout<<"矩形的面积"<<Area<<"矩形的面积"<<Perimeter<<endl;
}
private:
double a,b;
};
double Shape::sum=0;
int main()
{
Shape *A;
Circle B(30);
Rectangle C(30,50);
A =&B;
A->Show();
A=&C;
A->Show();
return 0;
}
学习虚函数,但碰到了意外问题,寻之,原来是protected和private的继承类不能通过基类指针对象访问。
因为基类的成员由于protected和private继承访问权限变成了protected和private,访问权限有限制了。
相关文章推荐
- 基类的protected成员变量只能被子类继承,在基类之外都不能直接访问基类protected成员变量
- 为什么子类不能访问基类的private成员?为什么要这样设计?
- 指针对虚基类成员变量的访问为什么不能直接通过offset访问,而需要通过vbtable间接访问?
- 为何private属性不能在子类中通过名字访问的理由
- 为什么子类不能访问基类的private成员?为什么要这样设计? .
- 为什么子类不能访问基类的private成员(为什么要使用get,set方法)?为什么要这样设计?
- 为什么子类不能访问基类的private成员?为什么要这样设计?
- 为什么子类不能访问基类的private成员?为什么要这样设计?
- 关于public, private 和 protected继承中对基类成员的访问
- Java中子类的基本继承方法,子类通过继承父类public方法,访问父类private成员
- 继承中访问控制:派生类public、protected、private继承基类
- 派生类是否继承基类中的private成员,若继承为何不能在成员函数中访问?
- C++中继承机制下基类public/private/protected成员的访问方式
- 为什么子类不能访问基类的private成员?为什么要这样设计?
- public,private,protected的区别,继承方法与访问权限
- java 访问权限private,默认(默认包权限),protected(继承访问权限),public的个人理解
- 多重继承下,不同基类指针指向同一子类对象的地址
- C++之public、private、protected(一)派生类继承与访问权限详解
- 多态&指针访问虚函数&不能被继承的类&快速排序&N皇后问题&插入排序&堆排序&merge归并排序&栈上生成对象&两个栈实现一个队列
- [C/C++][经典探讨]类继承中,通过基类指针delete释放,是否会造成内存泄漏