c++怎么将一个类,拆分出接口类,和实现类

还拿上一遍中定义的GradeBook类来实现:

#include <iostream>

using std::cout;
using std::endl;

#include <string> // program uses C++ standard string class.
using std::string;

#include <conio.h>

// GradeBook class definition
class GradeBook
{
public:
// constructor initializes courseName with string supplited as argument.
GradeBook(string name)
{
this->courseName=name;
} // end GradeBook constructor

// function to set the course name
void setCourseName(string name)
{
this->courseName=name;// store the course name in the object.
}// end function setCourseName

// function to get the course name.
string getCourseName()
{
return courseName;// return object‘s courseName
}// end function getCourseName

// display a welcome message to the GradeBook user
void displayMessage()
{
// call getCourseName to get the courseName
cout<<"Welcome to the grade book for \n"<<getCourseName()<<"|"<<endl;
}// end function displayMessage
private :
string courseName;
};// end class GradeBook

// function main begins program execution
int main()
{
// create two GradeBook objects.
GradeBook gradeBook1("CS101 Introduction to C++ programing");;
GradeBook gradeBook2("CS102 Data Structures in C++");

// display initial value of courseName for each GradeBook
cout<<"gradeBook1 created for course:"<<endl;
gradeBook1.displayMessage();
cout<<"gradeBook2 created for course:"<<endl;
gradeBook2.displayMessage();

cout<<"Test the get function"<<endl;
cout<<"gradeBook1 call getCourseName"<<gradeBook1.getCourseName()<<endl;
cout<<"gradeBook2 call getCourseName"<<gradeBook2.getCourseName()<<endl;
std::cin.get();

return 0; // indicates successful termination.
}// end main

代码拆分结构:

定义出接口(头文件/GradeBook.h):


#include<string>
using std::string;

// GradeBook class definition
class GradeBook
{
public:
// constructor initializes courseName with string supplited as argument.
GradeBook(string name);
// function to set the course name
void setCourseName(string name);
// function to get the course name.
string getCourseName();
// display a welcome message to the GradeBook user
void displayMessage();
private :
string courseName;
};// end class GradeBook

定义出实现类(源文件/GradeBook.cpp):


#include <iostream>
using std::cout;
using std::endl;

#include "GradeBook.h" // include definition of class GradeBook

// constructor initializes courseName with string supplited as argument.
GradeBook::GradeBook(string name)
{
this->courseName=name;
} // end GradeBook constructor

// function to set the course name
void GradeBook::setCourseName(string name)
{
this->courseName=name;// store the course name in the object.
}// end function setCourseName

// function to get the course name.
string GradeBook::getCourseName()
{
return this->courseName;// return object‘s courseName
}// end function getCourseName

// display a welcome message to the GradeBook user
void GradeBook::displayMessage()
{
// call getCourseName to get the courseName
cout<<"Welcome to the grade book for \n"<<getCourseName()<<"|"<<endl;
}// end function displayMessage

在“源文件“下定义Main.cpp写main测试函数:


#include <iostream>
using std::cout;
using std::endl;

#include <conio.h>

#include "GradeBook.h" // include definition of class GradeBook

// function main begins program execution
int main()
{
// create two GradeBook objects.
GradeBook gradeBook1("CS101 Introduction to C++ programing");;
GradeBook gradeBook2("CS102 Data Structures in C++");

// display initial value of courseName for each GradeBook
cout<<"gradeBook1 created for course:"<<endl;
gradeBook1.displayMessage();
cout<<"gradeBook2 created for course:"<<endl;
gradeBook2.displayMessage();

cout<<"Test the get function"<<endl;
cout<<"gradeBook1 call getCourseName:"<<gradeBook1.getCourseName()<<endl;
cout<<"gradeBook2 call getCourseName:"<<gradeBook2.getCourseName()<<endl;
std::cin.get();

return 0; // indicates successful termination.
}// end main

输出结果:

时间: 2024-08-14 11:28:45

c++怎么将一个类,拆分出接口类,和实现类的相关文章

【考点】List接口有哪几个实现类?分别说明其特征

List是用的较多的集合类型,List是一个接口,具体使用List集合类型时,需要使用时实现类.List接口的每个实现类也都实现了不同的数据结构,各自具有不同的特征,其中最常用的是List实现类. 参考答案:List接口中有以下几个常用实现 1 ArrayList:实现了动态数组的特征. 2 LinkedList: 实现了链表的数据结构,LinkedList也可以用作栈或者队列. 3 Vector:向量. 4 ArrayList  Vector类的功能 ArrayList都可以实现,区别在于Ve

JAVA中Collection接口和Map接口的主要实现类

Collection接口 Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements).一些Collection允许相同的元素而另一些不行.一些能排序而另一些不行.Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set. 所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创建一个空的Collectio

Java的Stack类实现List接口真的是个笑话吗

今天在网上闲逛时看到了这样一个言论,说“Java的Stack类实现List接口的设计是个笑话”. 当然作者这篇文章的重点不是这个,原本我也只是一笑置之,然而看评论里居然还有人附和,说“Java那种Stack的设计作为笑话,差不多可以算公案了”,我就有点不淡定了,为什么.什么时候“作为笑话”的并且“差不多可以算公案”了呢? 因此我决定写一篇文章来谈谈这个问题. 接口是什么 狭义地讲,接口就是一个类所定义的方法(方法名.参数.返回值).一个类提供了Foo方法,其他类就可以调用它.广义上讲,接口可以理

实习第一周第一天:接口 extends是继承类,implement是实现接口,原接口里面的方法填充,方法名也是不变,重写override是父类的方法名不变,把方法体给改了

一.定义 Java接口(Interface),是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 接口定义的一般形式为: [访问控制符]interface <接口名> { 类型标识符final 符号常量名n = 常数: 返回值类型  方法名([参数列表]); - } 二.接口的特点 1.Java接口中的成员变量默认都是public,static,final类型的(都可省略),必须被显

探Java多线程Thread类和Runnable接口之间的联系

首先复习一下Java多线程实现机制,Java实现多线程方法有如下这么几种: 1.继承了(extends)Thread类 2.实现了(implements)Runnable接口 也就是说  有如下两种情况 情况1: 继承Thread类.重写其方法run() .    然后new之.调用Start()方法 1 public class TestThread 2 { 3 private int i; 4 public static void main(String[] args) 5 { 6 // T

项目中的常量是放在接口里还是放在类里呢?

接口只用于定义类型 ??当类实现接口时,接口就充当可以引用这个类的实例的类型(type).因此,类实现了借口,就表明客户端可以对这个类的实例实施某些动作.为了任何其他目的而定义接口是不恰当的. ??有一种接口被称为常量接口(constant interface),亚布妈祖上面的条件.这种接口没有包含任何方法,它只包含静态的final域,每个域都导出一个常量.使这些常量的类实现这个借口,以避免类名来修饰常量名. // Constant interface antipattern - do not

关于多个类实现同一个接口的相关资料

http://liusu.iteye.com/blog/136690 某一天,某一个需求修改完成之后,提交代码.我修改了一个接口,在接口文件中添加了一个方法,并且在实现类中实现.但运维同事编译时告诉我出错了,为什么呢,因为不知道谁在代码路径中把这个接口的实现类做了一个备份,我没有在备份文件中实现添加的方法,从而报错.在这个问题上,突然发现自己只是了解一个接口多个实现类,但是从来没有深入了解过,顾借此机会整理一些东西吧.欢迎补充 1.一个接口,多个类implements该接口 public cla

java基础知识回顾之javaIO类--File类应用:过滤器接口FilenameFilter和FileFilter

FilenameFilter和FileFilter都是用来过滤文件,例如过滤,以.jpg或者.java结尾的文件,通过看他们的源码:通过使用File类中String[] list(FilenameFilter filter)或者public File[] listFiles(FileFilter filter)方法,把FilenameFilter或者FileFilter接口对象作为参数传入,通过实现接口里面的 boolean accept(File dir, String name) 或者boo

Apache—DBUtils框架简介、DbUtils类、QueryRunner类 、ResultSetHandler接口

Apache—DBUtils框架简介.DbUtils类.QueryRunner类 .ResultSetHandler接口 commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能.因此dbutils成为很多不喜欢hibernate的公司的首选. API介绍: org.apache.commons.dbutils.QueryRunner --BDMa