2 li roger li_roger 于 2016.09.22 19:15 提问

c++ 抽象类问题--构造函数能不能写在头文件中类外。

c++中 在头文件中写一个抽象类,对于其构造函数,我也定义在头文件中,但是定义的位置是在类外。 再写一个抽象类的子类,并用子类实例化对象。 出现了多重定义的问题,各位大大,能指教一下吗?

3个回答

seeze
seeze   2016.09.22 20:06

抽象类不应该写构造函数,因为它不能被实例化

u011418829
u011418829   2016.09.24 16:49

小胸弟,可以的。但在类外要表明是那个类的构造函数,比如对于类Student,构造函数Student(int, int);
在类外应该是这种形式的:Student::Student(int,int){}
示例代码:

#pragma once
#include
using std::string;
class Quote {
public:
Quote() = default;
Quote(const string& s, double p);
string isbn()const { return bookNo; }
virtual double netPrice(size_t n) const { return n*price; }
virtual ~Quote() = default;
private:
string bookNo;
protected:
double price=0.0;
};
Quote::Quote(const string& s, double p) :bookNo(s), price(p) {}
class BulkQuote :public Quote {
public:
BulkQuote() = default;
BulkQuote(const string&s, double p, size_t q, double d) :
Quote(s, p), min_qty(q), discount(d) {}
double netPrice(size_t) const override;
private:
size_t min_qty=0;
double discount = 0.0;
};
double BulkQuote::netPrice(size_t cnt) const {
if (cnt >= min_qty)
return cnt*(1 - discount)*price;
else return cnt*price;
}


halfpencil
halfpencil   2016.09.25 12:05

最好是贴一下你的代码,这样是比较有针对性。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
UML类图中的类 抽象类,具体类,主动类等
UML类图中的类,抽象类和具体类,主动类和非主动类等
C++抽象类 实用例子
C++抽象类 实用例子 自己写的代码 决对运行成功
学生类的构造函数
1. 定义一个学生类Student,包括:属性学号,姓名,性别,年龄,方法包括构造方法初始化变量;显示学号方法、显示姓名方法、显示性别方法、显示年龄方法、修改年龄方法。 2. 定义一个测试类StudentTest创建两个学生对象,John,Mark,通过新建对象传值初始化对象属性,分别显示两个学生的学号,性别,年龄,然后修改John的年龄并显示之。
定义一个形状类(抽象类)以及一个普通成员函数(用来重设形状大小)、两个纯虚成员函数-周长计算函数和面积计算函数
(1)程序功能简介 定义一个形状类(抽象类)以及一个普通成员函数(用来重设形状大小)、两个纯虚成员函数-周长计算函数和面积计算函数,利用该类及其派生类实现圆形、三角形、矩形和梯形等图形的周长和面积的计算;主函数完成基类和派生类的测试工作。 (2)程序设计说明 ① 定义一个形状类CShape(抽象类),并添加一个普通成员函数(用来重设形状大小,重载成员函数)SetData()、两个纯虚成员函数-周长计算函数Perimeter()和面积计算函数Area(); ② 由CShape派生出一个圆形类CCircle类,进行相应数据成员和成员函数的重新定义; ③ 由CShape派生出一个三角形类CTriangle类,进行相应数据成员和成员函数的重新定义; ④ 由CShape派生出一个矩形类CRectangle类,进行相应数据成员和成员函数的重新定义; ⑤ 由CShape派生出一个梯形类CTrapezia类,进行相应数据成员和成员函数的重新定义; ⑥ 设计测试主函数,通过输入相应的半径、长、宽、高等数据成员,计算相应的周长和面积; ⑦ 仔细考虑数据成员有哪些?分别放到哪些类(包括基类、子类等)中?注意:纯虚函数、抽象类和具体类的声明、定义和使用细节。 (3)程序调试运行 运行程序查看结果,并进行源代码调试和优化。
内联函数体要放在头文件
内联函数体要放在头文件中。基本知识。需要的可以看。
Java中抽象类和接口的区别与作用详解
结论:abstract class和Interface是JAVA语言中的两种定义抽象类的方式。Interface将abstract的概念作了更进一步的发挥。你可以想像Interface是“纯粹”的 abstract class,只可以包含抽象方法,也包括一些常量的定义,丝毫不带半点实现细节,它只提供接口,可以有数据成员,默认是、同时也必须是static & final型,可以通过Interface name直接访问。Interface可以实现Java的多重继承,而abstract class不能。abstract class和Interface中都可以没有抽象方法,当然,此刻,abstract class和Interface,也就失 去了abstract的抽象意义。 通常我们所讲的abstract class,至少包含了一个抽象方法,这个方法默认是protected型,而Interface也至少定义了一个抽象方法。abstract class中也可以包含已经实现了的方法。 abstract class可以extends另一个abstract class或者implements一个或者多个Interface,而Interface只能extends一个Interface。abstract class可以不去实现任何父类或者Interface定义的抽象方法(但这些抽象方法终归是要被全部实现的);相反的,非abstract class继承abstract class或者implements Interface时,必须显式实现abstract class和Interface中已定义的所有的抽象方法。
java 抽象类练习题
java 抽象类 接口 异常 练习题 1.在使用interface声明一个接口时,只可以使用哪个修饰符修饰该接口(D)。 A.private B.protected C.private protected D.public 2.下列程序运行的结果是(B)。 interface InterfaceA{ int max=100; void f(); } class ClassA implements InterfaceA{ public void f(){System.out.print(max);} } class ClassB{ void g(InterfaceA a){a.f();} } public class E { public static void main(String[] args) { ClassB b=new ClassB(); b.g(new ClassA()); } }
MATRIX 运算支持头文件
自己书写的矩阵类,目前只是一个架构,欢迎测试和 BUG 报告,同时是开源免费的,任何人都可以扩展和修改。 说明文件在 Readme 文件夹下,还有不少 BUG
C#中的基本知识点(面试时经常被问到)
委托 接口与抽象类的区别 装箱和拆箱 结构与类的区别 static构造函数 序列化 等等
java实现平面图形抽象类的继承
可实现求解长方形、三角形、椭圆形的周长和面积问题,长方形类、三角形类、椭圆形类均继承了抽象的平面图形类,并实现了其中的抽象方法。