230 likes | 357 Vues
This document details the declaration of the Coord class in C++, which includes private floating-point data members and constructor methods. It describes a display function, printCoord(), and a friend function, ConvPolar(), for converting between coordinate systems. Additionally, it covers concepts of file management, data type casting, inheritance, and method overriding. The integration of class hierarchies is emphasized, showcasing parent-child relationships among classes such as Circle and Cylinder. Key examples illustrate the creation and utilization of these classes in a robust programming environment.
E N D
CIS 230 29-Mar-06
Quiz • Write a class declaration (what would go in our Coord.h file…) for the class Coord that contains: • T private floating-point data members named xval and yval. • S Constructor function that does not receive any arguments. • A display function named printCoord() that does not accept or return any arguments. • A friend function named ConvPolar() that accepts two floating point numbers and returns a Coord.
Overview • Cast • Inheritance • Protected • Inheritance Overriding • #include “ “ • File Management
Cast • Temporarily converts one data type to another • Example: int first, second; float answer; … answer = (first + second) / 2; answer = (first + second) / 2.0; answer = ( (float) first + (float) second ) / 2; Integer division Real division Real Division Cast to a float
Cast • Two different ways to cast: • (float) first • float (first) • Example • answer = first / second; • Integer division • Can’t just add a decimal point • answer = (float) first / (float) second;
Inheritance • A class may be defined in terms of a previously defined class • This new class has all the components of its parent class: • Data • Methods • The new class may then add features of its own.
quadrilateral parallelogram trapezoid rectangle rhombus Inheritance • Each class may have many direct descendants Rhombus “inherits” all the aspects of parallelogram AND ALSO all the aspects of quadrilateral
Subclass form class Name : access Parent_class { … … }; Usually Public
Circle & Cylinder Circle Cylinder Sphere
Circle class class Circle { private: float radius; public: void store_radius(float); float calc_circum(); float calc_area(); float return_radius(); };
Cylinder class class Cylinder : public Circle { private: float length; public: void store_length(float); float clac_volume(); float return_length(); };
Cylinder member functions void Cylinder::store_length(float lnth) { length = lnth; } float Cylinder::calc_volume(void) { return (length * calc_area()); } Invokes on of its “parent’s” methods
Main() int main() { Cylinder cyl; float answer; cyl.store_radius(3); cyl.store_length(10); answer = cyl.calc_volume(); cout << "The volume of the cylinder is " << answer << '\n'; return 0; }
Problem • Cylinder HAS a radius (inherited) • Cylinder cannot directly touch it float Cylinder::calc_volume() { return (3.14 * radius * radius * length); } This is cylinder’s radius, but it was declared private in Circle
Protected • Protected – A new access form • Pivate to the outside world • Allows descendent classes access • Use in the original class class Circle { protected: float radius; public: … }; It’s important to PLAN your class hierarchy
Inheritance Overriding • To override a parent method: • Write a new method with the same name • Example: • Assume we want Cylinder’s area to be its entire surface area
Cylinder class class Cylinder : public Circle { private: float length; public: void store_length(float); float clac_volume(); float return_length(); float calc_area(); } Same name as in Circle
Cylinder::calc_area() float cylinder::calc_area() { float end, side; end = 3.14 * radius * radius; side = 2 * 3.14 * radius * length; return (2 * end + side); } This creates a problem in cylinder’s original calc_volume().
Cylinder::calc_volume() float Cylinder::calc_volume() { return (length * Circle::calc_area()); } Uses the parent method
#include “ “ • Classes (or other functions) may be used by other programs • Important to have a good class hierarchy • Important to have private/protected/public set correctly • #include “filename.ext” • Searches in the same directory as the program being compiled • Source code that will be compiled with the program • Should be thoroughly tested
We already know… • Circle.h contains: class Circle { protected: //variable declarations public: //method prototypes } • Circle.cpp would contain: • #include “circle.h” • method definitions
Descending with #include “ “ • In Cylinder.h: • #include “circle.h” • In main.cpp • #include “cylinder.h”
File Management circle.h cylinder.h #include “circle.h” main.cpp #include “cylinder.h” circle.cpp #include “circle.h” cylinder.cpp #include “cylinder.h”