派生类怎的使用基类的构造函数
派生类怎样使用基类的构造函数?
正在学习C++ PRIMER中文第四版第四部分“面向对象编程与泛型编程”的15章第2节:定义基类和派生类。
我根据这里的知识,定义了一个基类和派生类
基类:
派生类
直接这样,不能使用基类定义的构造函数,而我经上述注释符号去掉,也不能那样用,例如
Bulk_item book("isbn-001-2012-002", 38.0)
这样也是错误的,这样用了后,用 book.book() 返回空串。
不知道要如何使得派生类继承基类的构造函数?如果不能继承,该如何使得定义成与基类同样形式的构造函数呢?
------解决方案--------------------
目前编译器还没支持这种写法。
还是得写上
------解决方案--------------------
私有成员不能被继承
正在学习C++ PRIMER中文第四版第四部分“面向对象编程与泛型编程”的15章第2节:定义基类和派生类。
我根据这里的知识,定义了一个基类和派生类
基类:
#include <string>
#include <cstddef>
#ifndef ITEM_BASE_H
#define ITEM_BASE_H
class Item_base
{
public:
Item_base(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) {}
std::string book() const { return isbn; }
virtual double net_price(std::size_t n) const
{ return n * price; }
virtual ~Item_base() {}
private:
std::string isbn;
protected:
double price;
};
#endif
派生类
#include "Item_base.h"
#include <cstddef>
#include <string>
#ifndef BULK_ITEM_H
#define BULK_ITEM_H
class Bulk_item:public Item_base
{
public:
/*
Bulk_item(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) {}
*/
double net_price(std::size_t n) const;
~Bulk_item(){};
/*
private:
std::string isbn;
double price;
*/
};
#endif
直接这样,不能使用基类定义的构造函数,而我经上述注释符号去掉,也不能那样用,例如
Bulk_item book("isbn-001-2012-002", 38.0)
这样也是错误的,这样用了后,用 book.book() 返回空串。
不知道要如何使得派生类继承基类的构造函数?如果不能继承,该如何使得定义成与基类同样形式的构造函数呢?
------解决方案--------------------
目前编译器还没支持这种写法。
还是得写上
Bulk_item(const std::string &book = "",
double sales_price = 0.0):
isbn(book), price(sales_price) {}
------解决方案--------------------
私有成员不能被继承
class Item_base
{
public:
Item_base(const std::string &book = "", double sales_price = 0.0): isbn(book), price(sales_price)
{}
std::string book() const { return isbn; }
virtual double net_price(std::size_t n) const
{ return n * price; }
virtual ~Item_base() {}
public:
std::string isbn;
protected:
double price;
};
class Bulk_item:public Item_base
{
public:
Bulk_item(const std::string &book = "", double sales_price = 0.0)
{
isbn = book;
price = sales_price;
}
double net_price(std::size_t n) const{return 0;};
~Bulk_item(){}; /* private: std::string isbn; double price; */};
int _tmain(int argc, _TCHAR* argv[])
{
Bulk_item book("isbn-001-2012-002", 38.0);