#include<iostream>
#include<cstring>
using namespace std;
class Shape {
private:
char name[8];
char color[8];
public:
Shape(const char* name = "none", const char* color = "none");
void SetName(char* name);
void SetColor(char* color);
void Draw();
};
class Circle :protected Shape {
//Shape中所有的成员和方法自动转为protected,所以Shape只能和Circle进行内部交流,Shape自身失去对外直接沟通的桥梁
//Shape中privated类型的成员和方法仍然保持privated,永远要记住privated是一个元素的固有特性,外界是绝对不能直接修改的
private:
static const double PI;
double radius;
public:
Circle(const char* name = "none", const char* color = "none", double radius = 0);
double Area();
void Show();
};
int main() {
Circle c("circle ", "blue", 10);
//c.SetName();
//c.SetColor();
//c.Draw(); 全部失效
c.Show();
return 0;
}
/*******************************************************************/
Shape::Shape(const char* name, const char* color)
{
strcpy_s(this->name, strlen(name) + 1, name);
strcpy_s(this->color, strlen(color) + 1, color);
}
void Shape::SetName(char* name)
{
strcpy_s(this->name, strlen(name) + 1, name);
}
void Shape::SetColor(char* color)
{
strcpy_s(this->color, strlen(color) + 1, color);
}
void Shape::Draw()
{
cout << "Draw " << this->name << "with color " << this->color << endl;
}
/*******************************************************************/
const double Circle::PI = 3.14;
Circle::Circle(const char* name, const char* color, double radius) :Shape(name, color) {
this->radius = radius;
}
double Circle::Area() {
return PI * radius * radius;
}
void Circle::Show()
{
Shape::Draw();
cout << radius;
}
继承方式protected
最新推荐文章于 2024-04-10 17:03:33 发布
本文介绍了如何在C++中使用Shape和Circle类,展示了继承和封装的运用。Circle类继承自Shape,并保护了Shape的成员,仅允许Circle类内部访问。主要讲解了构造函数、属性设置和形状绘制方法。
摘要由CSDN通过智能技术生成