
protected专门就是为继承(子类)设计的 用public继承 那么基类所有的访问标识在子类不变 protected还是protected protected只有类本身 和类的子类可以访问,对象是无法访问的。
有这么一条原则:在继承的时候,无论用什么方式(public.protected.private),子类随时都可以访问父类的非private变量或函数。
protected专门就是为继承(子类)设计的 用public继承,基类所有的访问标识在子类不变, protected还是protected 。C++编程思想中是这么说的,public意味着随后的定义对所有人都适用;private意味着除了该类型的创建者和该类型的内部成员函数之外,任何人都无法访问这些定义;而protected是继承的类可以访问protected的成员,但不能访问private的成员。
#include <iostream>using namespace std
class Shape{
protected:
virtual double getArea() =0
virtual double getCircumference()=0
virtual void print(){
cout<<"Circumference = "<<getArea()<<"\n"
cout<<"Area = " <<getCircumference()<<"\n\n"
}
}
class Circle:public Shape {
public:
Circle(double radius = 0){
this->radius = radius
}
double getArea(){
return Pi* radius* radius
}
double getCircumference(){
return 2*Pi* radius
}
private:
//const static double Pi =3.14const static类型的变量,只有int能这么写,其他类型必须在类外初始化
double radius
}
const double Circle :: Pi = 3.14
class Triangle:public Shape{
public:
Triangle(double width ,double height){
this->width = width
this->height=height
}
double getArea(){
return width * height
}
double getCircumference(){
return 2*width + 2*height
}
private:
double width , height
}
int main(int argc, char *argv[])
{
cout <<"Let's create a Circle .\nEnter a radius: "
double Radius = 0
cin >>Radius
Circle MyCircle(Radius)
MyCircle.print()
cout <<"Let's create a Triangle .\nEnter the width and height : "
double width ,height
cin >>width >>height
Triangle MyTriangle(width ,height)
MyTriangle.print()
return 0
}
在说说protect继承的问题,在主函数定义的Circle对象,cirle是从shape共有继承下来的,所有对于circle来说,print函数是保护类型的,当然他的对象是访问不了自己的保护成员的。
protected允许其子类来访问,这句话的意思是在类定义内,子类可以访问访问父类的protect
例如:
#include <iostream>
using namespace std
class Shape{
protected:
virtual double getArea() =0
virtual double getCircumference()=0
virtual void print(){
cout<<"Circumference = "<<getArea()<<"\n"
cout<<"Area = " <<getCircumference()<<"\n\n"
}
}
class Circle:public Shape {
public:
Circle(double radius = 0) : radius(radius)
{
}
double getArea(){
return Pi* radius* radius
}
double getCircumference(){
return 2*Pi* radius
}
void print()
{
Shape::print()
}
private:
const static double Pi
double radius
}
const double Circle :: Pi = 3.14
class Triangle:public Shape{
public:
Triangle(double width ,double height){
this->width = width
this->height=height
}
double getArea(){
return width * height
}
double getCircumference(){
return 2*width + 2*height
}
void print()
{
Shape::print()
}
private:
double width , height
}
int main(int argc, char *argv[])
{
cout <<"Let's create a Circle .\nEnter a radius: "
double Radius = 0
cin >>Radius
Circle MyCircle(Radius)
MyCircle.print()
cout <<"Let's create a Triangle .\nEnter the width and height : "
double width ,height
cin >>width >>height
Triangle MyTriangle(width ,height)
MyTriangle.print()
return 0
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)