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

问题描述

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;
}

解决方案

#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;

}

解决方案二:

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

时间: 2024-11-02 14:34:34

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

(一三八)多态公有继承

假如一个类继承另一个类,但有一个类方法,在不同类中,其行为是不同的. 换句话说,方法的行为,应取决于调用该方法的对象.这种较复杂的行为称为 多态--具有多种形态,即同一种方法的行为,随上下文而异.   有两种重要的机制可用于实现多态公有继承: ①在派生类中重新定义基类的方法: ②使用虚方法. 注:这两种机制共同使用       虚方法的关键字是:virtual 例如:virtual void show(); 虚方法的关键字,不在类外部使用,例如.cpp文件中的方法定义   虚方法的作用在于: 在

《C++语言基础》程序阅读——继承和派生

返回:贺老师课程教学链接 (1) #include <iostream> using namespace std; class Data { public: Data(int i):x(i) { cout<<"A"; } ~Data() { cout<<"B"; } private: int x; }; class Base { public: Base(int i):b1(i) { cout<<"C&quo

关于C++中公有继承、私有继承、保护继承的讨论

一.文章来由 简单明了的理由,老生常谈但是没真正解决的问题,想搞清楚这个问题. 二.冗长的定义 我们先来看看这些冗长的定义: 公有继承: 当类的继承方式为公有继承时,基类的公有成员和保护成员的访问属性在派生类中不变,而基类的私有成员不可直接访问.也就是说基类的公有成员和保护成员被继承到派生类中访问属性不变,仍作为派生类的公有成员和保护成员,派生类的其他成员可以直接访问它们.在类族之外只能通过派生类的对象访问从基类继承的公有成员. 私有继承: 当类的继承方式为私有继承时,基类中的公有成员和保护成员

java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法

问题描述 java+ 程序 子类继承父类 创建子类对象时构造方法中无显示调用父类构造方法 创建子类对象时,Student s = new Student(""school""); 该构造方法中没有显示调用父类的构造方法,但还是编译成功了,该构造方法调用自身的构造函数,此构造函数中有调用父类的构造方法,执行成功的原因是什么 解决方案 不用显示调用,会自动执行父类的构造 解决方案二: 子类的构造方法中,如果没有显示调用父类的构造方法,会默认调用父类无参的构造方法.类似于

关于继承时成员数据产生的歧义

问题描述 关于继承时成员数据产生的歧义 解决方案 Doctor 和 Patient 用虚拟继承.class Doctor:public Virtual Persionclass Patient:public Virtual Persion

isempty-C# 接口的继承 私有成员

问题描述 C# 接口的继承 私有成员 public interface IIdGenerator { object GenerateId(object container, object document); bool IsEmpty(object id); } 下面这个继承上面的接口,接口中私有成员无法实现,总是报错,路过的给下帮助呗 public class rsIdGenerator:IIdGenerator { } 解决方案 接口没有私有属性,如果要在接口中发布属性,要这样 public

本人是初学者,刚看到类的定义,为什么要隐藏基类方法啊,还有继承的成员是虚拟的什么意思啊?

问题描述 本人是初学者,刚看到类的定义,为什么要隐藏基类方法啊,还有继承的成员是虚拟的什么意思啊? 解决方案 解决方案二:有时候基类的方法不能满足需要,就要进行重写override或new,从而隐藏基类方法解决方案三:隐藏基类方法是通过在子类中用new来重新定义方法(方法名与父类的一样)虚拟的方法,是在父类中在定义方法前加上Virtul,这样在子类中可以通过Override来重写该方法(方法,参数列表一样的,但是可以实现不一样的效果)解决方案四:那隐藏基类成员和重写他们的区别是什么啊解决方案五:

没人把程序员当回事儿

编程对很多人来说有点神秘.这就造成了在公司内部,人们对编程的事情产生了很多怀疑和疑惑. 通常,当你不了解一个东西是怎样做成的时,你只能说:可能是这样吧. 如果你从没见过工地,你也许会认为几个星期就能建出一栋大楼. 事实上,在这样的时间内是可以完成这栋建筑的,只是能不能用就不知道了. 如果你看过房子如何建造,跟踪它的建造过程,你能从物理实物看到地基如何浇灌,钢架结构如何搭成,等等. 但给电脑编写程序,或建设一个网站却是不可见的.     除了程序员外,程序代码对其他人来说是接触不到的.程序的运行好

systreeview32-C#通过API获取其他程序中TreeView和ListView中的值,并将值放到TXT文档中

问题描述 C#通过API获取其他程序中TreeView和ListView中的值,并将值放到TXT文档中 我现在想在C#里利用API读取其他程序中的SysTreeView32控件里所有节点和子节点的文本,获取其他程序中SysListView32控件里所有值,然后将值放到TXT文档中.但是在网上找了很多方法都没有实现.如果谁有现成的可运行的代码,我愿意付费(支付宝或银行转账)购买您的现成代码,当然前提是能用啊.您可以生成一个exe文件,发给我我测试下. 解决方案 http://www.cnblogs