如果我有一个派生类继承自基类(受保护或私有继承),我可以创建一个基类指针来指向派生对象吗? 这是我的c ++代码:
#include<iostream.h>
#include<conio.h>
class Geoshape
{
protected:
int dim1;
int dim2;
public:
Geoshape()
{dim1=0;dim2=0;}
Geoshape(int x, int y)
{dim1=x ; dim2=y;}
void setDim1(int x)
{dim1=x;}
int getDim1()
{return dim1;}
void setDim2(int y)
{dim2=y;}
int getDim2()
{return dim2;}
int calculateArea()
{return dim1*dim2;}
};
class Circle:protected Geoshape
{
public:
Circle()
{}
Circle(int r):Geoshape(r,r)
{dim1=r;dim2=r;}
void setR(int r)
{dim1=dim2=r;}
int getR()
{return dim1;}
float calculateArea()
{return 22.0/7*dim1*dim2;}
};
class Triangle:public Geoshape
{
public:
Triangle()
{}
Triangle(int x, int y):Geoshape(x,y)
{}
void setH(int h)
{dim2=h;}
int getH()
{return dim2;}
void setB(int b)
{dim1=b;}
int getB()
{return dim1;}
float calculateArea()
{return .5*dim1*dim2;}
};
class Rectangle:public Geoshape
{
public:
Rectangle()
{}
Rectangle(int x, int y):Geoshape(x,y)
{}
void setL(int l)
{dim1=l;}
int getL()
{return dim1;}
void setH(int h)
{dim2=h;}
int getH()
{return dim2;}
};
class Square:protected Rectangle
{
public:
Square()
{}
Square(int l):Rectangle(l,l)
{dim1=l;dim2=l;}
void setL(int l)
{dim1=dim2=l;}
int getL()
{return dim1;}
float calculateArea()
{return dim1*dim1;}
};
void main()
{
clrscr();
cout<<"enter circle raduis: ";
int raduis;
cin>>raduis;
Circle c1(raduis);
cout<< "this is area of Circle: "<<c1.calculateArea();
getch();
cout<<"\n\nenter base of triangle: ";
int base;
cin>>base;
cout<<"enter height of triangle: ";
int height;
cin>>height;
Triangle t1(base,height);
cout<< "this is area of Triangle: "<<t1.calculateArea();
getch();
cout<<"\n\nenter length of rectangle: ";
int length;
cin>>length;
cout<<"enter height of rectangle: ";
int height1;
cin>>height1;
Rectangle r1(length,height1);
cout<< "this is area of Rectangle: "<<r1.calculateArea();
getch();
cout<<"\n\nenter length of square: ";
int len;
cin>>len;
Square s1(len);
cout<< "this is area of Square: "<<s1.calculateArea();
Geoshape *p1;Geoshape *p2;Geoshape *p3;Geoshape *p4;
p2=&t1;
p3=&r1;
getch();
}
我想在main中添加这两行:
P1 =&安培; C1;
P4 =安培; S1;
但这会产生错误!
答案 0 :(得分:1)
您只能从类(来自成员函数和静态成员函数),派生类(仅在公共或受保护的继承)或友元函数中执行此操作(强制转换为“base”类型)。要拥有不受限制的能力,您可以: