C++Primer第五版 习题答案(部分) 第十五章 定义基类和派生类

15.1

基类需要其派生类继承的成员;

15.2

派生类成员函数有权访问基类中protected成员,而无权访问privated成员;

15.3

#include<iostream>
#include<string>

class Quote 
{
public:
	Quote() = default;
	Quote(const std::string& book, double sales_price) :bookNo(book),price(sales_price) {}
	std::string isbn() const { return bookNo; }
	virtual double net_price(std::size_t n)const { return n * price; }
	virtual ~Quote() = default;
private:
	std::string bookNo;
protected:
	double price = 0.0;
};

double print_total(std::ostream& os, const Quote& item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " #sold " << n << " total due: " << ret << std::endl;
	return ret;
}

int main()
{
	Quote q("a1", 80);
	print_total(std::cout, q, 2);

}

15.4

a)不正确,是定义,不是声明,而且不能继承自己;
b)不正确,是定义,不是声明;
c)不正确,声明中包含类名但不包含它的派生列表;

15.5

#include<iostream>
#include<string>

class Quote 
{
public:
	Quote() = default;
	Quote(const std::string& book, double sales_price) :bookNo(book),price(sales_price) {}
	std::string isbn() const { return bookNo; }
	virtual double net_price(std::size_t n)const { return n * price; }
	virtual ~Quote() = default;
private:
	std::string bookNo;
protected:
	double price = 0.0;
};

class Bulk_Quote :public Quote
{
public:
	Bulk_Quote() = default;
	Bulk_Quote(const std::string& book, double p, std::size_t qty, double disc) :Quote(book,p),min_qty(qty),discount(disc) {}
	double net_price(std::size_t)const override;

private:
	std::size_t min_qty = 0;
	double discount = 0.0;

};

double print_total(std::ostream& os, const Quote& item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " #sold " << n << " total due: " << ret << std::endl;
	return ret;
}

double Bulk_Quote::net_price(size_t cnt)const
{
	if (cnt > min_qty) return cnt * (1 - discount) * price;
	else return cnt * price;
}

int main()
{
	Quote q("a1", 80);
	print_total(std::cout, q, 2);

	Bulk_Quote bq("a2", 80, 5, 0.2);
	print_total(std::cout, bq, 10);

}

15.6

#include<iostream>
#include<string>

class Quote 
{
public:
	Quote() = default;
	Quote(const std::string& book, double sales_price) :bookNo(book),price(sales_price) {}
	std::string isbn() const { return bookNo; }
	virtual double net_price(std::size_t n)const { return n * price; }
	virtual ~Quote() = default;
private:
	std::string bookNo;
protected:
	double price = 0.0;
};

class Bulk_Quote :public Quote
{
public:
	Bulk_Quote() = default;
	Bulk_Quote(const std::string& book, double p, std::size_t qty, double disc) :Quote(book,p),min_qty(qty),discount(disc) {}
	double net_price(std::size_t)const override;

private:
	std::size_t min_qty = 0;
	double discount = 0.0;

};

double print_total(std::ostream& os, const Quote& item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " #sold " << n << " total due: " << ret << std::endl;
	return ret;
}

double Bulk_Quote::net_price(size_t cnt)const
{
	if (cnt > min_qty) return cnt * (1 - discount) * price;
	else return cnt * price;
}

int main()
{
	Quote q("a1", 80);
	print_total(std::cout, q, 2);

	Bulk_Quote bq("a2", 80, 5, 0.2);
	print_total(std::cout, bq, 10);

}

15.7

#include<iostream>
#include<string>

class Quote 
{
public:
	Quote() = default;
	Quote(const std::string& book, double sales_price) :bookNo(book),price(sales_price) {}
	std::string isbn() const { return bookNo; }
	virtual double net_price(std::size_t n)const { return n * price; }
	virtual ~Quote() = default;
private:
	std::string bookNo;
protected:
	double price = 0.0;
};

class Limit_Quote :public Quote
{
public:
	Limit_Quote() = default;
	Limit_Quote(const std::string& book, double p, std::size_t qty, double disc) :Quote(book,p),max_qty(qty),discount(disc) {}
	double net_price(std::size_t)const override;

private:
	std::size_t max_qty = 0;
	double discount = 0.0;

};

double print_total(std::ostream& os, const Quote& item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " #sold " << n << " total due: " << ret << std::endl;
	return ret;
}

double Limit_Quote::net_price(size_t cnt)const
{
	if (cnt <= max_qty)return cnt * (1 - discount) * price;
	else return max_qty * (1 - discount) * price + (cnt - max_qty) * price;
}

int main()
{
	Quote q("a1", 80);
	print_total(std::cout, q, 2);

	Limit_Quote bq("a2", 80, 5, 0.2);
	print_total(std::cout, bq, 10);
}

15.9

    Bulk_quote bulk_quote("bulk_quote_1", 10.10, 10, 0.5);

    // The pointer is of static type Quote, but it's dynamic type is Bulk Quote
    // Because of polymorphism the Bulk Quote implementation of the net_price()
    // method gets called.
    Quote *quote_pointer = &bulk_quote;
    quote_pointer->net_price(5);

    // The reference is of static type Quote, but it's dynamic type is Bulk Quote
    // Like with the pointer, the Bulk Quote implementation of the net_price()
    // method gets called.
    Quote &quote_reference = bulk_quote;
    quote_reference.net_price(5);

    // The static type of this variable is Quote. Here the Bulk Quote object
    // gets upcasted. The Quote part of bulk_quote gets copied into quote, but
    // the rest is not handled. Because of the cast the Quote implementation of
    // the net_price() method gets called.
    Quote quote = bulk_quote;
    quote.net_price(5);

15.11

Quote.h

#ifndef QUOTE_H_
#define QUOTE_H_

#include <string>
#include <iostream>

class Quote
{
public:
	Quote() = default;
	Quote(const std::string& book, double sales_price) : bookNo(book), price(sales_price) {}
	std::string isbn() const { return bookNo; }
	virtual double net_price(std::size_t n) const { return n * price; }
	virtual void debug() const;
	virtual ~Quote() = default;
private:
	std::string bookNo;
protected:
	double price = 0;
};

void Quote::debug() const
{
	std::cout << "bookNo: " << bookNo
		<< "; price: " << price;
}

#endif

Bulk_Quote.h

#ifndef BULK_QUOTE_H_
#define BULK_QUOTE_H_

#include "Quote.h"
#include <string>
#include <iostream>

class Bulk_quote : public Quote
{
public:
	Bulk_quote() = default;
	Bulk_quote(const std::string& book, double p, std::size_t qty, double disc) : Quote(book, p), min_qty(qty), discount(disc) { }
	double net_price(std::size_t) const override;
	void debug() const override;
private:
	std::size_t min_qty = 0;
	double discount = 0.0;
};

double Bulk_quote::net_price(size_t cnt) const
{
	if (cnt >= min_qty) return cnt * (1 - discount) * price;
	else return cnt * price;
}

void Bulk_quote::debug() const
{
	Quote::debug();
	std::cout << "; min_qty: " << min_qty
		<< "; discount: " << discount;
}

#endif

test.cpp

#include"Quote.h"
#include"Bulk_Quote.h"
#include <iostream>
#include <functional>

double print_total(std::ostream& os, const Quote& item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << std::endl;
	return ret;
}

int main()
{
	Quote q("A1-001", 80);
	Bulk_quote bq("A1-001", 80, 5, 0.2);
	// print_total(std::cout, q, 10);
	// print_total(std::cout, bq, 10);

	q.debug();
	std::cout << std::endl;
	bq.debug();
	std::cout << std::endl;

	return 0;
}

15.15

Disc_quote.h

#ifndef DISC_QUOTE_
#define DISC_QUOTE_
#include"Quote.h"
#include<string>

class Disc_quote :public Quote
{
public:
	Disc_quote() = default;
	Disc_quote(const std::string& book, double price,std::size_t qty,double disc)
		:Quote(book,price),quantity(qty),discount(disc) {}
	double net_price(std::size_t)const = 0;
protected:
	std::size_t quantity;
	double discount = 0.0;

};

#endif // !DISC_QUOTE_

Bulk_quote.h

#ifndef BULK_QUOTE_H_
#define BULK_QUOTE_H_

#include"Disc_quote.h"
#include <string>
#include <iostream>

class Bulk_quote : public Disc_quote
{
public:
	Bulk_quote() = default;
	Bulk_quote(const std::string& book, double p, std::size_t qty, double disc) :Disc_quote(book,p,qty,disc) { }
	double net_price(std::size_t) const override;
	void debug() const override;
private:
	std::size_t min_qty = 0;
	double discount = 0.0;
};

double Bulk_quote::net_price(size_t cnt) const
{
	if (cnt >= min_qty) return cnt * (1 - discount) * price;
	else return cnt * price;
}

void Bulk_quote::debug() const
{
	Quote::debug();
	std::cout << "; min_qty: " << min_qty
		<< "; discount: " << discount;
}

#endif

15.16

Limit_quote.h

#ifndef BULK_QUOTE_H_
#define BULK_QUOTE_H_

#include"Disc_quote.h"
#include <string>
#include <iostream>

class Limit_quote : public Disc_quote
{
public:
	Limit_quote() = default;
	Limit_quote(const std::string& book, double p, std::size_t qty, double disc) :Disc_quote(book, p, qty, disc) { }
	double net_price(std::size_t) const override;
	void debug() const override;
};

double Limit_quote::net_price(size_t cnt) const
{
	if (cnt >quantity) return quantity * (1 - discount) * price+(cnt-quantity)*price;
	else return cnt * price;
}

void Limit_quote::debug() const
{
	Quote::debug();
	std::cout << "; quantity: " << quantity
		<< "; discount: " << discount;
}

#endif

15.17

#include"Quote.h"
#include"Bulk_Quote.h"
#include <iostream>
#include <functional>

double print_total(std::ostream& os, const Quote& item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << std::endl;
	return ret;
}

int main()
{
	Quote q("A1-001", 80);
	Bulk_quote bq("A1-001", 80, 5, 0.2);
	// print_total(std::cout, q, 10);
	// print_total(std::cout, bq, 10);

	q.debug();
	std::cout << std::endl;
	bq.debug();
	std::cout << std::endl;

	Disc_quote dq;
	return 0;
}

在这里插入图片描述

15.20

class Base
{
public:
	void memfcn(Base& b) { b = *this; };
protected:
	int prot_mem;
private:
	char priv_mem;
};

struct Pub_Derv : public Base
{
public:
	void memfcn(Base& b) { b = *this; };
};

struct Priv_Derv : private Base
{
public:
	void memfcn(Base& b) { b = *this; };
};

struct Prot_Derv : protected Base
{
public:
	void memfcn(Base& b) { b = *this; };
};

struct Derived_from_Public : public Pub_Derv
{
public:
	void memfcn(Base& b) { b = *this; };
};

struct Derived_from_Private : public Priv_Derv
{
public:
	// void memfcn(Base &b) { b = *this; };
};

struct Derived_from_Protected : public Prot_Derv
{
public:
	void memfcn(Base& b) { b = *this; };
};

int main()
{
	Pub_Derv d1;
	Priv_Derv d2;
	Prot_Derv d3;
	Derived_from_Public dd1;
	Derived_from_Private dd2;
	Derived_from_Protected dd3;

	Base* p = &d1;
	// p = &d2;
	// p = &d3;
	p = &dd1;
	// p = &dd2;
	// p = &dd3;
	return 0;
}

15.22

#include<iostream>
#include<string>

class Shape
{
public:
	typedef std::pair<double, double> Coordinate;
	Shape() = default;
	Shape(const std::string &n) :name(n) {  }
	virtual double area()const = 0;
	virtual double perimeter() const = 0;
	virtual~Shape() = default;
private:
	std::string name;
};

class Rectangle :public Shape
{
public:
	Rectangle() = default;
	Rectangle(const std::string& n, 
			const Coordinate& a, 
			const Coordinate& b, 
			const Coordinate& c, 
			const Coordinate& d) :
			Shape(n),a(a),b(b),c(c),d(d) {}
	~Rectangle() = default;
protected:
	Coordinate a;
	Coordinate b;
	Coordinate c;
	Coordinate d;
};

class Square :public Rectangle
{
public:
	Square() = default;
	Square(const std::string& n,
		const Coordinate& a,
		const Coordinate& b,
		const Coordinate& c,
		const Coordinate& d) :
		Rectangle(n,a,b,c,d) {}
	~Square() = default;
};
int main()
{
	return 0;
}


15.26

Quote.h

#ifndef QUOTE_H_
#define QUOTE_H_

#include <string>
#include <iostream>

class Quote
{
	friend bool operator!=(const Quote& lhs, const Quote& rhs)
	{
		return lhs.bookNo != rhs.bookNo && lhs.price != rhs.price;
	}
public:
	Quote() = default;
	Quote(const std::string& book, double sales_price) : bookNo(book), price(sales_price) {}
	std::string isbn() const { return bookNo; }
	Quote(const Quote&);
	Quote(Quote&&)noexcept;
	Quote& operator=(const Quote&);
	Quote& operator=(Quote&&)noexcept;
	virtual double net_price(std::size_t n) const { return n * price; }
	virtual void debug() const;
	virtual ~Quote() = default;
private:
	std::string bookNo;
protected:
	double price = 0;
};

void Quote::debug() const
{
	std::cout << "bookNo: " << bookNo
		<< "; price: " << price;
}

#endif

Bulk_quote.h

#ifndef BULK_QUOTE_H_
#define BULK_QUOTE_H_

#include"Disc_quote.h"
#include <string>
#include <iostream>

class Bulk_quote : public Disc_quote
{
public:
	Bulk_quote() = default;
	Bulk_quote(const std::string& book, double p, std::size_t qty, double disc) :Disc_quote(book,p,qty,disc) { }
	Bulk_quote(Bulk_quote&);
	Bulk_quote(Bulk_quote&&)noexcept;
	Bulk_quote& operator=(Bulk_quote&);
	Bulk_quote& operator=(Bulk_quote&&)noexcept;

	double net_price(std::size_t) const override;
	void debug() const override;
	~Bulk_quote()override;
private:
	std::size_t min_qty = 0;
	double discount = 0.0;
};

double Bulk_quote::net_price(size_t cnt) const
{
	if (cnt >= min_qty) return cnt * (1 - discount) * price;
	else return cnt * price;
}

void Bulk_quote::debug() const
{
	Quote::debug();
	std::cout << "; min_qty: " << min_qty
		<< "; discount: " << discount;
}

#endif

15.27

Bulk_quote.h

#ifndef BULK_QUOTE_H_
#define BULK_QUOTE_H_

#include"Disc_quote.h"
#include <string>
#include <iostream>

class Bulk_quote : public Disc_quote
{
public:
	Bulk_quote() = default;
	using Disc_quote::Disc_quote;
	Bulk_quote(const std::string& book, double p, std::size_t qty, double disc) :Disc_quote(book,p,qty,disc) { }
	Bulk_quote(Bulk_quote&);
	Bulk_quote(Bulk_quote&&)noexcept;
	Bulk_quote& operator=(Bulk_quote&);
	Bulk_quote& operator=(Bulk_quote&&)noexcept;

	double net_price(std::size_t) const override;
	void debug() const override;
	~Bulk_quote()override;
private:
	std::size_t min_qty = 0;
	double discount = 0.0;
};

double Bulk_quote::net_price(size_t cnt) const
{
	if (cnt >= min_qty) return cnt * (1 - discount) * price;
	else return cnt * price;
}

void Bulk_quote::debug() const
{
	Quote::debug();
	std::cout << "; min_qty: " << min_qty
		<< "; discount: " << discount;
}

#endif

15.28

#include "Quote.h"
#include "Bulk_quote.h"
#include "Limit_quote.h"
#include <iostream>
#include <functional>
#include <vector>
#include <memory>

double print_total(std::ostream &os, const Quote &item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << std::endl;
	return ret;
}

int main()
{
	Quote q("A1-001", 80);
	Bulk_quote bq("A1-001", 80, 5, 0.2);
	Limit_quote lq("A1-001", 80, 5, 0.2);
	print_total(std::cout, q, 10);
	print_total(std::cout, bq, 10);
	print_total(std::cout, lq, 10);

	double total_price = 0;
	std::vector<Quote> vector_quote;
	vector_quote.push_back(bq);
	for(const auto &q : vector_quote)
		total_price += q.net_price(10);
	std::cout << "total_price:" << total_price << std::endl;

	return 0;
}

15.29

当派生类对象被赋值给基类对象时,其中的派生类部分将被“切掉”,因此容器和存在继承关系的类型无法兼容。
而使用指针时,调用的是net_price版本依赖于指针所指对象的动态类型

#include "Quote.h"
#include "Bulk_quote.h"
#include "Limit_quote.h"
#include <iostream>
#include <functional>
#include <vector>
#include <memory>

double print_total(std::ostream &os, const Quote &item, size_t n)
{
	double ret = item.net_price(n);
	os << "ISBN: " << item.isbn() << " # sold: " << n << " total due: " << ret << std::endl;
	return ret;
}

int main()
{
	Quote q("A1-001", 80);
	Bulk_quote bq("A1-001", 80, 5, 0.2);
	Limit_quote lq("A1-001", 80, 5, 0.2);
	print_total(std::cout, q, 10);
	print_total(std::cout, bq, 10);
	print_total(std::cout, lq, 10);

	std::vector<std::shared_ptr<Quote>> basket;
	// basket.push_back(std::make_shared<Quote>(q));
	basket.push_back(std::make_shared<Bulk_quote>(bq));
	// basket.push_back(std::make_shared<Limit_quote>(lq));

	double total_price = 0;
	for (const auto &vq : basket)
		total_price += vq->net_price(10);
	std::cout << "total_price:" << total_price << std::endl;

	return 0;
}

15.30

Basket.h

#ifndef BASKET_H_
#define BASKET_H_

#include "Quote.h"
#include <iostream>
#include <memory>
#include <set>

class Basket
{
public:
	void add_item(const std::shared_ptr<Quote> &sale) { items.insert(sale); }
	void add_item(const Quote &sale) { items.insert(std::shared_ptr<Quote>(sale.clone())); }
	void add_item(Quote &&sale) { items.insert(std::shared_ptr<Quote>(std::move(sale).clone())); }
	double total_receipt(std::ostream&) const;
private:
	static bool compare(const std::shared_ptr<Quote> &lhs, const std::shared_ptr<Quote> &rhs) { return lhs->isbn() < rhs->isbn(); }
	std::multiset<std::shared_ptr<Quote>, decltype(compare) *> items{compare};
};

#endif

Basket.cpp

#include "Basket.h"

double Basket::total_receipt(std::ostream &os) const
{
	double sum = 0.0;
	for(auto iter = items.cbegin(); iter != items.cend(); iter = items.upper_bound(*iter))
	{
		sum += print_total(os, **iter, items.count(*iter));
	}

	os << "Total Sale: " << sum << std::endl;
	return sum;
}

main.cpp

#include "Quote.h"
#include "Bulk_quote.h"
#include "Limit_quote.h"
#include "Basket.h"
#include <iostream>
#include <functional>
#include <vector>
#include <memory>

int main()
{
	Bulk_quote bq("A1-001", 80, 5, 0.2);
	print_total(std::cout, bq, 10);

	std::vector<std::shared_ptr<Quote>> basket;
	basket.push_back(std::make_shared<Bulk_quote>(bq));

	// double total_price = 0;
	// for (const auto &vq : basket)
	// 	total_price += vq->net_price(10);
	// std::cout << "total_price:" << total_price << std::endl;

	Basket basket_object;
	for (int i = 0; i < 10; ++i)
	{
		basket_object.add_item(bq);
	}
	basket_object.total_receipt(std::cout);

	return 0;
}

15.35

Query.h

#ifndef QUERY_H_
#define QUERY_H_

#include <string>
#include <iostream>
#include "Query_base.h"
#include "WordQuery.h"
#include "TextQuery.h"

class Query
{
	friend Query operator~(const Query&);
	friend Query operator|(const Query&, const Query&);
	friend Query operator&(const Query&, const Query&);
public:
	Query(const std::string&);
	QueryResult eval(const TextQuery &t) const { return q->eval(t); }
	std::string rep() const { return q->rep(); }
private:
	Query(std::shared_ptr<Query_base> query) : q(query) { }
	std::shared_ptr<Query_base> q;
};

std::ostream& operator<<(std::ostream &os, const Query &query)
{
	return os << query.rep();
}

inline Query::Query(const std::string &s) : q(new WordQuery(s)) { std::cout << "Query::Query(const std::string &s)" << std::endl; }

#endif

Query_base.h

#ifndef QUERY_BASE_H_
#define QUERY_BASE_H_

#include <string>
#include <iostream>
#include "TextQuery.h"
#include "Query.h"

class Query_base
{
	friend class Query;
protected:
	using line_no = TextQuery::line_no;
	virtual ~Query_base() = default;
private:
	virtual QueryResult eval(const TextQuery&) const = 0;
	virtual std::string rep() const = 0;
};

#endif

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基类point是一个表示点的类,包含两个属性x和y,表示点的横纵坐标。 派生类circle是一个表示圆的类,继承自基类point,包含一个属性radius,表示圆的半径。 求圆的周长可以使用公式C=2πr,其中r为圆的半径,π为圆周率,约等于3.14。 因此,圆的周长可以表示为C=2π*radius。在circle类中,可以定义一个方法get_circumference(),用于计算圆的周长。具体实现如下: class point: def __init__(self, x, y): self.x = x self.y = y class circle(point): def __init__(self, x, y, radius): super().__init__(x, y) self.radius = radius def get_circumference(self): return 2 * 3.14 * self.radius 假设有一个圆c,其半径为5,则可以通过以下代码计算其周长: c = circle(, , 5) circumference = c.get_circumference() print(circumference) 输出结果为31.4,即圆的周长约为31.4。 ### 回答2: 定义基类point和派生类circle,可以使用面向对象的思想来设计程序。在这个程序中,point作为基类,主要用来存储点的坐标信息。circle作为派生类,继承了point所有的属性和方法,并添加了一个特有的属性——半径。 在circle中,定义一个求圆周长的方法circumference(),在该方法中通过调用父类point中获取坐标信息的方法,以及自身的半径属性来计算出圆的周长。具体的实现可以参照以下代码示例: ```python class point: def __init__(self, x, y): self.x = x self.y = y def get_x(self): return self.x def get_y(self): return self.y class circle(point): def __init__(self, x, y, r): super().__init__(x, y) self.r = r def get_r(self): return self.r def circumference(self): import math return 2 * math.pi * self.r ``` 在上述代码中,point类有一个构造方法__init__(),用来初始化坐标信息,以及两个获取坐标信息的方法get_x()和get_y()。而circle类继承了point类,并添加了一个半径属性,以及一个求周长的方法circumference()。 使用该程序,可以创建一个圆对象并调用circumference()方法来求圆的周长。如下面这个示例: ```python c = circle(1, 2, 3) c_circumference = c.circumference() print("圆的周长是:", c_circumference) ``` 在上述示例中,我们创建了一个圆对象c,它的圆心坐标为(1, 2),半径为3。然后,调用c的circumference()方法,将计算出的周长保存在变量c_circumference中,并打印出来。 通过这种面向对象的程序设计方式,我们不仅可以方便地求出圆的周长,而且还可以扩展程序,添加更多的图形对象和方法。 ### 回答3: 基类point定义: Point是一个基类,用来表示平面上的一个点,其中包含两个变量:横坐标x和纵坐标y。基类point中包含以下成员函数: - 构造函数:用来初始化Point对象的x和y坐标。 - getX():返回Point对象的横坐标x。 - getY():返回Point对象的纵坐标y。 - setX(double x):设置Point对象的横坐标x。 - setY(double y):设置Point对象的纵坐标y。 派生类circle定义: Circle是一个派生类,用来表示平面上的一个圆,其中包含一个圆心点的引用(point对象)和一个半径radius。派生类circle中包含以下成员函数: - 构造函数:用来初始化Circle对象,需要传递一个圆心点和半径。 - getCenter():返回Circle对象的圆心点。 - getRadius():返回Circle对象的半径。 - setCenter(Point center):设置Circle对象的圆心点。 - setRadius(double radius):设置Circle对象的半径。 - getPerimeter():计算Circle对象的周长。 计算圆的周长: 根据圆的定义可知,圆的周长公式是2πr,即半径(radius)乘以2π。而我们在派生类circle中已经定义了一个getRadius()函数,可以用来获取圆的半径;因此,我们只需要在派生类circle中再定义一个getPerimeter()函数,用来计算圆的周长即可。 getPerimeter()函数的实现: double getPerimeter() { return 2 * 3.14159 * getRadius(); } 总结: 在上述代码中,我们定义了一个基类point和一个派生类circle,用来表示平面上的点和圆。通过在派生类circle中定义getPerimeter()函数,我们可以方便地计算圆的周长。这种面向对象的编程方式具有良好的可维护性和扩展性,可以方便地添加新的方法和属性,同时避免了代码冗余。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值