C++随笔——成员函数的相互调用问题:

来源:互联网 发布:宏业软件好多钱 编辑:程序博客网 时间:2024/06/04 20:03

C++ 程序设计 Y.Daniel Liang 11章例子:Course

Course.h

#ifndef COURSE_H#define COURSE_H#include <string>using namespace std;class Course{public:Course(const string& courseName,int Capacity);~Course();string getCoureName() const;void addStudent(const string& name);void dropStudent(const string& name);string* getStudent() const;int getNumberOfStudents() const;void printStudent();private:string courseName;string* student;int numberOfStudent;int Capacity;};#endif  COURSE_H

Course.cpp
#include <iostream>#include "Course.h"#include<algorithm>using namespace std;Course::Course(const string&courseName ,int Capacity){numberOfStudent = 0;this->courseName = courseName;this->Capacity = Capacity;student = new string[Capacity];}Course::~Course(){delete []student;}string Course::getCoureName() const{return courseName;}void Course::addStudent(const string& name){if(numberOfStudent < Capacity){    student[numberOfStudent] = name;numberOfStudent++;}else{cout << "学生太多了" << endl;return;}}void Course::dropStudent(const string& name){//string* pFindName = find(student,student+numberOfStudent,name);if(pFindName != student+numberOfStudent){cout << "this student has been found" << "at position" << " " <<pFindName - student <<  endl;int postion = pFindName - student;for(int i = postion+1; i < numberOfStudent ;i++){student[i-1] = student[i];}numberOfStudent--;}else{cout << name << "is not found" << endl;}}string* Course::getStudent() const{return student;} int Course::getNumberOfStudents() const{return numberOfStudent;}int getNumberOfStudents(){return 1;}void Course::printStudent(){for (int i = 0 ;i < getNumberOfStudents();i++)  //屏蔽了 全局的 函数 getNumberOfStudents(),效果和 Course::getNumberOfStudents() 相同。{cout << student[i] <<",";}}

TestCourse.cpp

#include <iostream>#include <string>#include "Course.h"using namespace std;int main(void){int a;Course course1("Data_Structure",10);Course course2("Database_Systems",15);course1.addStudent("PJ");course1.addStudent("BS");course1.addStudent("AK");course2.addStudent("PJ");course2.addStudent("SS");cout << "Number of student in course1:" << course1.getNumberOfStudents() << "\n";string* students = course1.getStudent();course1.printStudent();cout << " \n Number of students in course2:" << course2.getNumberOfStudents() << "\n";students = course2.getStudent();course2.printStudent();course1.dropStudent("BS");course1.printStudent();cin >> a;return 0;}

在  Course::printStudent(){
 for (int i = 0 ;i < getNumberOfStudents();i++)  //屏蔽了 全局的 函数 getNumberOfStudents(),效果和 Course::getNumberOfStudents() 相同。
 {
  cout << student[i] <<",";
 }
}
中调用的 getNumerOfStudent() 为自己的成员函数 Course::getNumberOfStudent(),而不是 在上面定义的全局命名空间的 getNumberOfStudent();相当于写成 Couse::getNumberOfStudent(); 如果想 调用上面的 全局命名空间的普通函数,则需要 显示的写成:

for (int i = 0 ;i < ::getNumberOfStudents();i++)  //屏蔽了 全局的 函数 getNumberOfStudents(),效果和 Course::getNumberOfStudents() 相同。{cout << student[i] <<",";}

::getNumberOfStudent()显示的说明了调用 全局命名空间的 getNumberOfStudent();



原创粉丝点击