1.C++结构体案例
#include<iostream>
#include<string>
#include<ctime>
using namespace std;
struct student
{
string sName;
int score;
};
struct teacher
{
string tName;
student stu[5];
};
//给老师和学生赋值的函数
void allocateSpace(teacher* tea,int len)
{
string nameSeed = "ABCDE";
for (int i = 0; i < len; i++)
{
tea[i].tName = "Teacher_";
tea[i].tName += nameSeed[i];
for (int j = 0; j < 5 ; j++)
{
tea[i].stu[j].sName = "Student_";
tea[i].stu[j].sName += nameSeed[j];
int random = rand() % 61+40;//40~99
tea[i].stu[j].score = random;
}
}
}
void printInfo(teacher *ter,int len)
{
for (int i = 0; i < len; i++)
{
cout << "第" << i + 1 << "位老师的姓名:" << ter[i].tName << endl;
for (int j = 0; j < 5; j++)
{
cout << "\t学生姓名:" << ter[i].stu[j].sName<< " 学生成绩:" << ter[i].stu[j].score<<endl;
}
}
}
int main()
{
//随机数种子
srand((unsigned int)time(NULL));
student stu[15];
teacher ter[3];
int len = sizeof(ter) / sizeof(ter[0]);
allocateSpace(ter,len);
printInfo(ter,len);
system("pause");
return 0;
}
2.案例2
#include<iostream>
#include<string>
#include<ctime>
using namespace std;
struct Hero
{
string name;
int age;
string sex;
};
void bubbleSort(Hero* heroArray, int len)
{
for (int i = 0; i < len-1; i++)
{
for (int j = 0; j < len - i - 1; j++)
{
if (heroArray[j].age >heroArray[j + 1].age)
{
int temp = heroArray[j].age;
heroArray[j].age = heroArray[j + 1].age;
heroArray[j + 1].age = temp;
string temp1 = heroArray[j].name;
heroArray[j].name = heroArray[j + 1].name;
heroArray[j + 1].name = temp1;
string temp2 = heroArray[j].sex;
heroArray[j].sex = heroArray[j + 1].sex;
heroArray[j + 1].sex = temp2;
}
}
}
}
void printInfo(Hero* heroArray, int len)
{
for (int i = 0; i < len; i++)
{
cout <<"姓名:" << heroArray[i].name
<< " 年龄:" << heroArray[i].age
<< " 性别:" << heroArray[i].sex << endl;
}
}
int main()
{
Hero heroArray[5] =
{
{"刘备",23,"男"},
{"关羽", 22, "男"},
{"张飞", 20, "男"},
{"赵云", 21, "男"},
{"貂蝉", 19, "女"}
};
int len = sizeof(heroArray) / sizeof(heroArray[0]);
bubbleSort(heroArray, len);
printInfo(heroArray, len);
system("pause");
return 0;
}
3.案例要求
#include<iostream>
using namespace std;
class Cube
{
public:
//赋值
void setlen(double len)
{
m_l = len;
}
void setwig(double wei)
{
m_w = wei;
}
void sethei(double hei)
{
m_h = hei;
}
double readlen()
{
return m_l;
}
double readwei()
{
return m_w;
}
double readhei()
{
return m_h;
}
//行为
double areas()
{
double areas=0;
areas = 2 * (m_l * m_w + m_l * m_h + m_h * m_w);
return areas;
}
double volume()
{
double volume=0;
volume = m_l * m_h * m_w;
return volume;
}
bool isequ2(Cube& c)
{
if (m_l== c.readlen() && m_w == c.readwei() && m_h== c.readhei())
{
return true;
}
return false;
}
private:
//属性
double m_l;
double m_w;
double m_h;
};
//全局函数
bool isequ(Cube &c1,Cube &c2)//&为引用,若用值传递浪费内存
{
if (c1.readlen()==c2.readlen()&&c1.readwei()==c2.readwei()&&c1.readhei()==c2.readhei())
{
return true;
}
return false;
}
int main()
{
Cube c1,c2;
c1.setlen(1);
c1.setwig(2);
c1.sethei(3);
cout << "长方体1的表面积是:" << c1.areas() << endl;
cout << "长方体1的体积是:" << c1.volume() << endl;
c2.setlen(1);
c2.setwig(2);
c2.sethei(3);
cout << "长方体2的表面积是:" << c2.areas() << endl;
cout << "长方体2的体积是:" << c2.volume() << endl;
cout << "全局函数判断:"
<< (isequ(c1,c2)==true?"相等":"不相等")<<endl;
cout << "成员函数判断:"
<< (c1.isequ2(c2)== true ? "相等" : "不相等") << endl;
system("pause");
return 0;
}
4.案例要求
注意:(这个案例有两个注意点,我们按照注意点来写)
1.在类中可以让另一个类作为本类中的成员;
2.可将类拆分成.h头文件和.cpp文件(需要在项目中创建不同类的头文件(.h)和.cpp文件)。
a.(main.cpp)主函数中代码:
#include<iostream>
#include<string>
#include"point.h"
#include"circle.h"
using namespace std;
void relate(circle & c,point &p)
{
int d = 0;
d = (c.getcenter().getx() - p.getx()) * (c.getcenter().getx() - p.getx()) + (c.getcenter().gety() - p.gety()) * (c.getcenter().gety() - p.gety());
cout << "距离为:" << d << endl;
if (d > c.getr()* c.getr())//点在圆外
{
cout<< "点在圆外"<<endl;
}
else if (d < c.getr() * c.getr())//点在圆内
{
cout<<"点在圆内"<<endl;
}
else//点在圆上
{
cout<< "点在圆上"<<endl;
}
}
int main()
{
point p;
p.setx(0);
p.sety(0);
point center;
center.setx(2);
center.sety(2);
circle c;
c.setcenter(center);
c.setr(2);
relate(c, p);
system("pause");
return 0;
}
b.point.h(点类头文件写法)
#pragma once
#include<iostream>
using namespace std;
class point
{
public:
void setx(int x);
void sety(int y);
int getx();
int gety();
private:
int p_x;
int p_y;
};
c.circle.h(圆类头文件写法)
#pragma once //防止头文件重复包含
#include"circle.h"
#include"point.h"
using namespace std;
class circle
{
public:
void setcenter(point& p);
void setr(int r);
int getr();
point getcenter();
private:
//在类中可以让另一个类作为本类中的成员
point center;//圆心
int c_r;//半径
};
d.point.cpp(点类.cpp文件写法)
#include "point.h"
//下面函数都属于成员函数 point::为声明作用域
void point::setx(int x)
{
p_x = x;
}
void point::sety(int y)
{
p_y = y;
}
int point::getx()
{
return p_x;
}
int point::gety()
{
return p_y;
}
e.circle.cpp(圆类.cpp文件写法)
#include"circle.h"
#include"point.h"
void circle::setcenter(point& p)
{
center = p;
}
void circle::setr(int r)
{
c_r = r;
}
int circle::getr()
{
return c_r;
}
point circle::getcenter()
{
return center;
}