类中如何实现成员函数的循环???

作者&投稿:寇肯 (若有异议请与网页底部的电邮联系)
类的成员函数的实现~

//以前写的,差不多,个别名字不同
#ifndef MSTRING_H_H
#define MSTRING_H_H
#include
class mString
{
public:
mString();
mString(char*);
mString(mString&);
~mString();


mString& operator=(mString&);
mString& operator=(const char*);
mString& operator+=(mString&);
mString& operator+=(const char*);


mString operator+(mString&);mString operator+(const char*);
char operator[](int i);
friend ostream& operator>(istream&,mString&);
char* GetStr()const;int GetLength()const;
static int StrLength(const char*);
static void StrCopy(char*,const char*);

private:
char* m_str;
};


mString::mString()
{
m_str=new char[1];
m_str[0]='\0';
}


mString::mString(char* c_str)
{
if(c_str)
{
int length=StrLength(c_str);
m_str=new char[length+1];
StrCopy(m_str,c_str);
}
else
{
m_str=new char[1];
m_str[0]='\0';
}
}


mString::mString(mString& s)
{
int length=s.GetLength();
m_str=new char[length+1];
StrCopy(m_str,s.GetStr());
}


mString::~mString()
{
if(m_str)
{
delete m_str;
m_str=NULL;
}
}


int mString::StrLength(const char* c_str)
{
int length=0;


while(*c_str++)
length++;

return length;
}


void mString::StrCopy(char* dest,const char*src)
{

while(*dest++=*src++);
}


char* mString::GetStr()const
{
return m_str;
}


int mString::GetLength()const
{
return StrLength(m_str);
}


ostream& operator<<(ostream& out,mString& s)
{
out<<s.GetStr();
return out;
}


istream& operator>>(istream& in,mString& s)
{
char temp[1024];
in>>temp;


int length=mString::StrLength(temp);
char*p=s.GetStr();
if(p)
delete p;
p=new char[length+1];
mString::StrCopy(p,temp);
return in;
}


mString& mString::operator=(mString& s)
{
if(this!=&s)
{
int length=StrLength(s.GetStr());
if(m_str)

delete m_str;

m_str=new char[length+1];
StrCopy(m_str,s.GetStr());
}

return *this;
}


mString& mString::operator=(const char* c_str)
{
int length=StrLength(c_str);
if(m_str)

delete m_str;

m_str=new char[length+1];
StrCopy(m_str,c_str);



return *this;
}


mString& mString::operator+=(mString& s)
{
int len1=StrLength(m_str);
char* temp=new char[len1+1];
StrCopy(temp,m_str);
delete m_str;
int len2=StrLength(s.GetStr());
m_str=new char[len1+len2+1];



StrCopy(m_str,temp);
StrCopy(m_str+len1,s.GetStr());
delete temp;


return *this;
}
mString& mString::operator+=(const char* c_str)
{


int len1=StrLength(m_str);
char* temp=new char[len1+1];
StrCopy(temp,m_str);
delete m_str;


int len2=StrLength(c_str);
m_str=new char[len1+len2+1];



StrCopy(m_str,temp);
StrCopy(m_str+len1,c_str);
delete temp;


return *this;
}
mString mString::operator+(mString& s)
{
int len1=StrLength(m_str);

int len2=s.GetLength();


char*p=new char[len1+len2+1];
StrCopy(p,m_str); StrCopy(p+len1,s.GetStr());
mString temp(p); delete p;
return temp;
}
mString mString::operator+(const char* c_str)
{


int len1=StrLength(m_str);

int len2=StrLength(c_str);


char*p=new char[len1+len2+1];
StrCopy(p,m_str); StrCopy(p+len1,c_str);
mString temp(p); delete p;
return temp;
}
char mString::operator[](int i)
{
int len=this->GetLength();
if(i=len)
{
coutout of range"<<endl;
return -1;
}
else
return m_str[i];
}
#endif

类的成员函数是函数;
函数成员是变量。
class A{
int Show()
{
int m=9;
for(int i=0;i<5;i++)
{
cout<<

不太理解你的意思,你是不是希望多次输入学生信息,然后分别给他们赋值,然后处理?
如果是这样的话你就应该设计一个循环,然后将每次输入的学生信息构建成多个对象,然后使用容器将其保存起来,这样的话就可以进行分别处理了!
以下是之前写的一个用容器实现的学生信息管理的代码,希望对你有用!
如果有问题的话,可以再问!
#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <iterator>
#include <iomanip>
using namespace std;
class student{ //构造学生类
private:
double language; //学生信息
double math;
double english;
double number;
double sumsocos;
double avesocos;
int place;
string name;

public:
student(double lenguagevalue=0,double mathvalue=0,double englishvalue=0,double numbervalue=0,double sumsocosvalue=0,double avesocos=0,int placevalue=0,string namevalue="lilei"); //构造函数
double getlanguage(){return language;}; //获取学生信息
double getmath(){return math;};
double getenglish(){return english;};
double getnumber(){return number;};
double getsumsocos(){return sumsocos;};
double getplace(){return place;};
double getavesocos(){return avesocos;};
string getname(){return name;};
void setsumsocos(double digit){sumsocos=digit;}; //设置总成绩
void setave(double digit){avesocos=digit;}; //设置平均成绩
void setplace(int placevalue){place=placevalue;};
double sum(){return language+math+english;}; //计算总成绩
double average(){return sum()/3;}; //计算平均成绩
};
student::student(double lenguagevalue,double mathvalue,double englishvalue,double numbervalue,double sumsocosvalue,double avesocosvalue,int placevalue,string namevalue):language(lenguagevalue),math(mathvalue),english(englishvalue),number(numbervalue),sumsocos(sumsocosvalue),avesocos(avesocosvalue),place(placevalue){
name=namevalue;

};
void searchstudent(vector< student >::iterator beg,vector< student >::iterator end,double number) //查找学生
{
bool isfind=false;
for(size_t i=0;i<=number;)
{
if((*beg).getnumber()!=number)
{
beg++;
if(beg==end)
{
break;
}
}
else
{
cout<<"您查询的学生信息为 :"<<endl;
cout<<"姓名:"<<(*beg).getname()<<" 学号:"<<(*beg).getnumber()<<" 语文:"<<(*beg).getlanguage()<<" 数学:"<<(*beg).getmath()<<" 英语:"<<(*beg).getenglish()<<endl;
isfind=true;
break;
}
}
if(isfind==false)
{
cout<<"对不起,没有找到你需要的学生信息!"<<endl;
return;
}
};
double sumavesoco(vector<student>::iterator beg,vector<student>::iterator end){ //计算学生总成绩
vector<student>::iterator begin=beg;
vector<student>::iterator ended=end;
while(begin!=ended)
{
int sum=0;
int ave=0;
sum+=(*begin).getenglish();
sum+=(*begin).getlanguage();
sum+=(*begin).getmath();
ave=sum/3;
(*begin).setsumsocos(sum);
(*begin).setave(ave);
begin++;
}
vector<student>::iterator begin1=beg;
vector<student>::iterator ended1=end;
int sumave=0;
int sumsoco=0;
int count=0;
while(begin1!=ended1)
{
sumsoco+=(*begin1).getsumsocos();
count++;
begin1++;
}
sumave=sumsoco/count;
cout<<"学生总分与平均分为:"<<endl;
while(beg!=end)
{
cout<<"姓名:"<<setw(5)<<(*beg).getname()<<"总分:"<<setw(5)<<(*beg).getsumsocos()<<"平均分:"<<setw(5)<<(*beg).getavesocos()<<endl;
beg++;
}
return sumave;
};
void place(vector<student>::iterator beg,vector<student>::iterator end){ //计算排名
vector<student> a(beg,end);
vector<student>::iterator begin=a.begin();
for(int i=0;i<a.size();i++)
{
for(int j=i+1;j<a.size();j++)
{
if(a[i].getsumsocos()<a[j].getsumsocos())
{
student astudent;
astudent=a[i];
a[i]=a[j];
a[j]=astudent;
}
}
}
cout<<"完成排名,按总分大小排名后的次序为:"<<endl;
vector<student>::iterator begin1=a.begin();
while(begin1!=a.end())
{
cout<<setw(5)<<"姓名:"<<setw(5)<<(*begin1).getname()<<setw(5)<<"学号:"<<setw(5)<<(*begin1).getnumber()<<setw(5)<<"语文:"<<setw(5)<<(*begin1).getlanguage()<<"数学:"<<setw(5)<<(*begin1).getmath()<<"英语:"<<setw(5)<<(*begin1).getenglish()<<endl;
begin1++;
}
};
void searchupstudent(vector<student>::iterator beg,vector<student>::iterator end,double avesocos){ //计算平均成绩以上学生
cout<<"总成绩在全班平均成绩以上的学生信息为:"<<endl;
while(beg!=end)
{
if((*beg).getsumsocos()>=avesocos)
{
cout<<"姓名:"<<setw(5)<<(*beg).getname()<<"学号:"<<setw(5)<<(*beg).getnumber()<<"总分:"<<setw(5)<<(*beg).getsumsocos()<<"平均分:"<<setw(5)<<(*beg).getavesocos()<<"语文:"<<setw(5)<<(*beg).getlanguage()<<"数学:"<<setw(5)<<(*beg).getmath()<<"英语:"<<setw(5)<<(*beg).getenglish()<<endl;

}
beg++;
}
};
int main()
{
vector< student > stuarray;
loop: cout<<"********************************************************************************"<<endl
<<"1.输入信息 2.计算总分与平均分 3.查询学生信息 4.按总分排名 5.查询平均分以上的学生" <<endl
<<"********************************************************************************"<<endl;
int chose=0;
cout<<"请输入您的选择!"<<endl;
cin.clear();
cin.sync();
cin>>chose;
if(chose<=0||chose>5)
{
cout<<"输入错误,请重新输入!"<<endl;
goto loop;
}
char ch=0;
int count=0;
double sumave;
switch(chose)
{
case 1:
{
do{
cout<<"请输入学生信息!"<<endl;
double lan,math,english,number,socos,avesocos,place;
string name,sex;
cout<<"语文:";
cin>>lan;
cout<<endl<<"数学:";
cin>>math;
cout<<endl<<"英语:";
cin>>english;
cout<<endl<<"学号:";
cin>>number;
cin.sync();
cout<<endl<<"姓名:";
getline(cin,name);
cout<<endl;
student* astudent=new student(lan,math,english,number,socos=0,avesocos=0,place=0,name);
stuarray.push_back(*astudent);
cout<<"是否继续输入?"<<endl;
cin.clear();
cin.sync();
cin>>ch;
}while(tolower(ch)=='y');
cout<<endl;
goto loop;
}
case 2:
{
vector<student>::iterator beg=stuarray.begin();
vector<student>::iterator end=stuarray.end();

sumave=sumavesoco(beg,end);
cout<<"全班平均分为:"<<sumave<<endl;
goto loop;
}

case 3:
{ cout<<"请输入需要查询的学生学号!"<<endl;
int number2=0;
cin>>number2;
searchstudent(stuarray.begin(),stuarray.end(),number2);
goto loop;
}

case 4:
{

vector<student>::iterator beg=stuarray.begin();
vector<student>::iterator end=stuarray.end();
place(beg,end);
goto loop;
}
case 5:
{
vector<student>::iterator beg=stuarray.begin();
vector<student>::iterator end=stuarray.end();
searchupstudent(beg,end,sumave);
goto loop;
}
}
return 0;
}


类中如何实现成员函数的循环???
student(double lenguagevalue=0,double mathvalue=0,double englishvalue=0,double numbervalue=0,double sumsocosvalue=0,double avesocos=0,int placevalue=0,string namevalue="lilei"); \/\/构造函数 double getlanguage(){return language;}; \/\/获取学生信息 double getmath(){return math;}; double geteng...

C++ 包括类的声明、成员函数的实现
另外,在一个单独的源文件Foo.cpp中,首先包含头文件Foo.hpp以便实现类Foo的成员函数f()和g():\/\/Foo.cpp include "Foo.hpp"void NS::Foo::f(){ \/*..*\/ } void NS::Foo::g(){ \/*..*\/ } 为了使用名字空间成员,必须使用成员的全路径名,它由名字空间后跟::合成原名组成。因此,类F...

如何定义和实现一个类的成员函数为回调函数(转)
解决的办法也很简单,就是使用一个静态类指针作为类成员,通过在类创建时初始化该静态指针,如pThis=this,然后在回调函数中通过该静态指针就可以访问所有成员变量和成员函数了。这种处理办法适用于只有一个类实例的情况,因为多个类实例将共享静态类成员和静态成员函数,这就导致静态指针指向最后创建的类实...

C++如何在A类中定义一个指针指向B类的一个成员函数
1、直接定义即可。比如已有一个类class A, 再定义一个类class B,这样在B的定义中,就可以有一个A*类型的成员变量。比如 class B { A * a;};这里的B::a就是一个A*类型的指针。2、需要注意的是,要使用这种形式的定义,要么A的定义在B的上方,要么在B定义前加一个A类的声明。如 class A...

如何定义和实现一个类的成员函数为回调函数?
要定义和实现一个类的成员函数为回调函数需要做三件事:a.声明;b.定义;c.设置触发条件,就是在你的函数中把你的回调函数名作为一个参数,以便系统调用如:声明回调函数类型typedef void (*FunPtr)(void);定义回调函数class A{public:static void callBackFun(void) \/\/回调函数,必须声明为static...

怎么给类添加一个成员函数?
先单击你要添加的类名。再点击右键,选择添加成员函数就行了。或者直接现在头文件中添加函数的定义,然后在其源文件中添加实现的函数就行了!

"mfc"中怎样往类里加成员函数?
首先选到CLASSVIEW,然后右击需要添加成员函数的类,选择ADD MEMBER FUNCTION,出来的对话框,比如说public int add(int y,int x);Function Type:intFunction Declare:add(int y,int x)Acess:选择public最后两个static virtual你的函数是静态就选择static,是虚函数就选择virtual。这样就成功往类里加成员...

MFC 中一个对话框中想调用另一个对话框的成员函数,怎么实现?
你把两个对话框都设置为两个类。 然后 在其中一个对话框中 构建另一个对话框的对象, 然后通过该对象调用 成员函数。

c++中类的成员函数的原型申明和实现应该在什么地方?
成员函数的声明要放在类体中,成员函数的实现可以放在类体中,也可以放在类体外,一般比较简单的成员函数放在类体中,复杂的成员函数放在类体外。

C++中怎样声明输入流成员函数和输出流成员函数
在程序中一般用cout和插入运算符“<<”实现输出,cout流在内存中有相应的缓冲区。有时用户还有特殊的输出要求,例如只输出一个字符。ostream类除了提供上面介绍过的用于格式控制的成员函数外,还提供了专用于输出单个字符的成员函数put。如:cout.put('a');调用该函数的结果是在屏幕上显示一个字符a。put函数的参数可以...

黄平县13350112017: 类中如何实现成员函数的循环??? -
书贸益肾: 不太理解你的意思,你是不是希望多次输入学生信息,然后分别给他们赋值,然后处理?如果是这样的话你就应该设计一个循环,然后将每次输入的学生信息构建成多个对象,然后使用容器将其保存起来,这样的话就可以进行分别处理了!以下...

黄平县13350112017: C++如何怎样让类成员逐个在循环里面使用?就是第一次循环用类第一个成员变量,第二次循环用第二个..,可能吗 -
书贸益肾: 这个如果类的成员变量都是一个类型,可以用一个数组来代替每个成员变量,循环中就可以指定哪个成员变量了.如果是不同类型,比如第一个是int,第二个是char这样,那么估计只能在循环体里面用if或者switch来判断了.比如:for(i=0;i<n;i++) { if(i==0) // 使用第一个成员变量 if(i==1) // 使用第二个成员变量//以此类推 }

黄平县13350112017: C++ 类的定义中怎么使用循环 求解决 谢谢 -
书贸益肾: int day()这个方法少了对花括号, 加对花括号

黄平县13350112017: C++中怎么在构造函数中,连续多次调用别的成员函数??急急!!!~~ -
书贸益肾: 可以直接把init中的代码放入构造函数;如果觉得构造函数内容太多,就放入一个成员函数init()中,这样感觉有模块化点#include<vector>#include<string> using namespace std; class Teacher { public: Teacher(); ~Teacher() public: init(); }; ...

黄平县13350112017: c#中如何在类的外部实现成员函数 -
书贸益肾: 你的问题不是很确切,用几种实现方法,但不知道哪个适合你.1. 用C#的委托(delegate)、事件(event),外部定义的方法可以传入类中.2.如果你说的外部可以是继承,则可以使用abstract标记方法,在继承的子类中实现.具体例子网上很多,就不给出了.

黄平县13350112017: 类和对象的成员函数 -
书贸益肾: 类的成员函数(简称类函数)是函数的一种,它的用法和作用和第4章介绍过的函数基本上是一样的,它也有返回值和函数类型, 它与一般函数的区别只是: 它是属于一个类的成员,出现在类体中. 它可以被指定为private(私有的)、public ...

黄平县13350112017: 我想在定义一个类的时候,自动的执行类中的一个成员函数,怎么样实现啊? -
书贸益肾: 构造函数 和 复制构造函数..或者可以一并重载 = 操作符

黄平县13350112017: 类的成员函数的实现 -
书贸益肾: //以前写的,差不多,个别名字不同#ifndef MSTRING_H_H#define MSTRING_H_H#include class mString { public: mString(); mString(char*); mString(mString&); ~mString(); mString& operator=(mString&); mString& operator=(const char*); mString...

黄平县13350112017: 怎样在类中通过指针来实现成员函数调用成员函数? -
书贸益肾: 错误是因为“函数”和“成员函数”是有区别的,“成员函数”是属于一个特定的类的,普通的函数不是.所以说compute函数的参数是一个接受0个参数,没有返回值的“普通的函数”,而你传的参数show是属于类A的“成员函数”.写成下面这样就可以通过编译了void compute(void (A::*p)()){} void AA(){ compute(&A::show);}

黄平县13350112017: 各位大神们,C++有遍历类中成员函数的方法吗 -
书贸益肾: 对记录:我的意思不是用“.”来显示所有的成员,而是通过某个函数和方法来动态的取得记录中的成员的名称, 简单一点就是我可以用一个循环动态的显示这个记录中所有成员的名称!!对类:我只想知道其中的私有成员变量的个数和私有成员的变量名!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网