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 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;
cout << "\n圆柱的体积为：" << v << endl;
}

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

void Cone::supArea() {
float s;
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   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 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;
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;
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   2016.04.28 14:00

C++ 公有继承、保护继承、私有继承的区别
1）基类成员对派生类的可见性 1. 公有继承(public) ：基类的公有成员和保护成员作为派生类的成员时，它们都保持原有的状态，而基类的私有成员仍然是私有的，不能被这个派生类的子类所访问。 2. 私有继承(private) ：基类的公有成员和保护成员都作为派生类的私有成员，并且不能被这个派生类的子类所访问。 3. 保护继承(protected) ：基类的所有公有

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++三种继承方式下的访问权限控制