2 sinat 34358742 sinat_34358742 于 2016.04.28 12:30 提问

C++程序,公有继承之后成员的值变成了随机值,怎么回事儿

#include
#include
using namespace std;

const float Pi = 3.1415;

class C {
public:
C(float r, float h) :Radius(r), high(h) {}
protected:
float Radius;
float high;
};

class Round :public C {
public:
void supArea();
void volume();
};

void Round::supArea() {
float s;
s = 4 * Pi*pow(C::Radius, 2);
cout << "\n球的表面积为:" << s << endl;
}

void Round::volume() {
float v;
v = 4 * Pi*pow(C::Radius, 3) / 3;
cout << "\n球的体积为:" << v << endl;
}

class Cylinder :public C {
public:
void supArea();
void volume();
};

void Cylinder::supArea() {
float s;
s = 2 * Pi*pow(C::Radius, 2) + C::high * 2 * Pi*C::Radius;
cout << "\n圆柱的表面积为:" << s << endl;
}

void Cylinder::volume() {
float v;
v = Pi*pow(C::Radius, 2)*C::high;
cout << "\n圆柱的体积为:" << v << endl;
}

class Cone :public C {
public:
void supArea();
void volume();
};

void Cone::supArea() {
float s;
s = Pi*pow(C::Radius, 2) + Pi*C::Radius*C::high;
cout << "\n圆锥的表面积为:" << s << endl;
}

void Cone::volume() {
float v;
v = 1 / 3 * Pi*pow(C::Radius, 2)*sqrt(pow(C::high, 2) - pow(C::Radius, 2));
cout << "\n圆锥的体积为:" << v << endl;
}

int main() {
C q(1, 2);
Round r;
r.supArea();
r.volume();
Cylinder c1;
c1.supArea();
c1.volume();
Cone c2;
c2.supArea();
c2.volume();
return 0;
}

2个回答

sueastward
sueastward   2016.04.28 14:04
已采纳

#include
using namespace std;
const float Pi = 3.1415;
class C {
public:
C(float r, float h) :Radius(r), high(h) {}
protected:
float Radius;
float high;
};
class Round :public C {
public:
Round(float r,float h):C(r,h){}
void supArea();
void volume();
};
void Round::supArea() {
float s;

s = 4 * Pi*pow(C::Radius, 2);
cout << "\n球的表面积为:" << s << endl;

}
void Round::volume() {
float v;
v = 4 * Pi*pow(C::Radius, 3) / 3;
cout << "\n球的体积为:" << v << endl;
}
class Cylinder :public C {
public:
Cylinder(float r,float h):C(r,h){}
void supArea();
void volume();
};
void Cylinder::supArea() {
float s;
s = 2 * Pi*pow(C::Radius, 2) + C::high * 2 * Pi*C::Radius;
cout << "\n圆柱的表面积为:" << s << endl;
}
void Cylinder::volume() {
float v;
v = Pi*pow(C::Radius, 2)*C::high;
cout << "\n圆柱的体积为:" << v << endl;
}
class Cone :public C {
public:
Cone(float r,float h):C(r,h){}
void supArea();
void volume();
};
void Cone::supArea() {
float s;
s = Pi*pow(C::Radius, 2) + Pi*C::Radius*C::high;
cout << "\n圆锥的表面积为:" << s << endl;
}
void Cone::volume() {
float v;
v = 1 / 3 * Pi*pow(C::Radius, 2)*sqrt(pow(C::high, 2) - pow(C::Radius, 2));
cout << "\n圆锥的体积为:" << v << endl;
}
int main() {

Round r(1,2);
r.supArea();
r.volume();
Cylinder c1(1,2);
c1.supArea();
c1.volume();
Cone c2(1,2);
c2.supArea();
c2.volume();

return 0;

}

sueastward
sueastward   2016.04.28 14:00

你再看看继承的概念
你这样理解是错的

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
公有继承,私有继承,保护继承的区别
一个子类继承父类时,可按照public、private和protected方式继承父类,每种继承方式的区别如下: 1) public继承方式 基类中所有public成员在派生类中为public属性;基类中所有protected成员在派生类中为protected属性;基类中所有private成员在派生类中不可访问。 2) protected继承方式 基类中的所
C++ 公有继承、保护继承、私有继承的区别
1)基类成员对派生类的可见性 1. 公有继承(public) :基类的公有成员和保护成员作为派生类的成员时,它们都保持原有的状态,而基类的私有成员仍然是私有的,不能被这个派生类的子类所访问。 2. 私有继承(private) :基类的公有成员和保护成员都作为派生类的私有成员,并且不能被这个派生类的子类所访问。 3. 保护继承(protected) :基类的所有公有
继承与派生:派生类对基类成员的访问控制之公有继承
派生类从基类继承时有三个步骤,第一个步骤是吸收基类成员,吸收了基类中除构造函数和析构函数之外的所有数据成员和函数成员,第二个步骤就是修改基类成员,包括修改对基类成员的访问属性和覆盖基类成员,第三个步骤是添加新成员。第二个步骤中修改对基类成员的访问属性可以通过派生类的继承方式控制。       类的成员有public(公有)、protected(保护)和private(私有)三种访问属性。类的
C++中基类私有成员会被继承吗
1.派生类间接访问继承私有成员在类的继承中,类的私有成员在派生类中是“不可见“的,这种”不可见“是指在派生类的成员函数中,或者通过派生类的对象(指针,引用)不能直接访问它们。但是,不能直接访问并不代表不能访问。在派生类还是能够通过调用基类的共有函数的方式来间接地访问基类的私有成员,包括私有成员变量和私有成员函数。考察如下程序。#include <iostream> using namespace s
C语言拾遗:公有、私有和受保护的继承--《C++ primer》笔记
protectedInheritance.cpp 间接继承和书本描述不一致,书上说因为第一重继承变private,第二重继承才无法访问Base::i~是private,现实是提示Base::i是protected,好像跳过Private_derived类直接找基类了。 继承对基类的保护,还是普遍规律,只能越来越严,不能变松。 还有,标号不是限制派生类对基类成员(表达不清楚,是基类
公有继承和私有继承的实例
#include "iostream.h" #include "string.h" class person //基类person定义 { private: char name[20]; int age; bool sex;//0代表女,1代表男 public: person() //基类构造函数 { strcpy(name,""); sex = 1; age
c++之访问从基类继承的成员
1当派生类与基类中有相同成员时:若没有特别限定,则通过派生类对象使用的是派生类的同名成员。如果要通过派生类对象访问基类中被隐藏的同名成员,应使用基类名和作用域操作符“::”来限定#include &amp;lt;iostream&amp;gt; using namespace std; class Base1 { public: int var; void fun() { cout &amp;lt;...
C++三种继承方式下的访问权限控制
众所周知,C++类中的成员(函数/变量)拥有三种访问权限:        public:用该关键字修饰的成员表示公有成员,该成员不仅可以在类内可以被访问,在类外也是可以被访问的,是类对外提供的可访问接口;        private:用该关键字修饰的成员表示私有成员,该成员仅在类内可以被访问,在类体外是隐藏状态;        protected:用该关键字修饰的成员表示保护成员,保护成员
关于C++中公有继承、私有继承、保护继承的讨论
简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题。
公有继承中派生类Student对基类Person成员的访问
题目内容:已知基类Person的定义如下:class Person{ char Name[20];char Sex;int Age;public:void Register(char *name, int age, char sex) ;void ShowMe();};请通过继承的方法建立一个派生类Student,其中1.新增的数据成员有:int Number;char ClassName[10]...