在编程练习一中,读者能学习到引用、常引用的概念和用法,以及C++中类的使用方法、类成员的可访问范围,还有使用C++编写学生信息处理程序的方法。
代码写明了引用的概念和使用方法。
#include
using namespace std;
int main()
{
int n = 4;
int& r = n; //r引用了n,从此r等价于n
r = 2; //修改r就是修改n
cout << " r = " << r << endl;
cout << " n = " << n << endl;
cout << endl;
n = 5; //修改n就是修改r
cout << " r = " << r << endl;
int& r2 = r;//r2和r引用同一个变量,就是n
cout << "r2 = " << r2 << endl;
return 0;
}
引用可以作为函数的返回值,函数返回的是对变量的引用。
#include
using namespace std;
int n = 4;
int& SetValue()
{
return n; //返回对n的引用
}
int main()
{
SetValue() = 40; //返回值是引用的函数调用表达式,可以作为左值使用
cout << "n = " << n << endl;
int& r = SetValue();
n = 3;
cout << "r = " << r << endl;
return 0;
}
char变量可以用来初始化const char&的引用。
#include
using namespace std;
void Func2(const char &r){}
int main()
{
const char cc = 'a';
char c;
const char& rc1 = cc;
const char& rc2 = c; //char变量可以用来初始化const char&的引用
char& r2 = (char&)cc;//强制类型转换
r2 = 'c';
cout << "cc = " << cc << endl;
cout << "r2 = " << r2 << endl;
Func2(rc1); //参数类型匹配
return 0;
}
在C++中,使用string来处理字符串非常方便。
/* string基本用法 */
#include
#include //要使用string对象,必须包含此头文件
using namespace std;
int main()
{
string s1 = "123", s2; //s2是空串
s2 += "abc";
cout << s1 << endl;
cout << s2 << endl;
cout << endl;
string s3 = s1 + s2;
cout << s3 << endl;
cout << s3.size() << endl; //求s3长度
string s4 = s3.substr(1, 3);//求s3从下标1开始,长度为3的子串
cout << s4 << endl;
cout << endl;
char str[20];
strcpy(str, s4.c_str()); //复制s4中的字符串到str
cout << str << endl;
return 0;
}
在类的示例程序中,读者可以学到使用C++写类并创建对象的方法。
/* 矩形类 */
#include
using namespace std;
class CRectangle
{
public:
int w, h; //成员变量,宽度和高度
void init(int w_, int h_);//成员函数,设置宽度和高度
int area(); //成员函数,求面积
int perimeter(); //成员函数,求周长
}; //必须有分号
void CRectangle::init(int w_, int h_)
{
w = w_; h = h_;
}
int CRectangle::area()
{
return w * h;
}
int CRectangle::perimeter()
{
return 2 * (w + h);
}
int main()
{
int w, h;
CRectangle r; //r是一个对象
cin >> w >> h;
r.init(w, h);
cout << "It's area is " << r.area() << endl;
cout << "It's perimeter is " << r.perimeter() << endl;
cout << "sizeof(CRectangle) = " << sizeof(CRectangle) << endl;
return 0;
}
通过一个企业员工管理程序,向读者说明了类的对象不可直接访问类的私有成员变量。
/* 企业员工管理程序 */
#include
#include
using namespace std;
class CEmployee
{
private:
char szName[30]; //名字
public:
int salary; //工资
void setName(char* name);
void getName(char* name);
void averageSalary(CEmployee e1, CEmployee e2);
};
void CEmployee::setName(char* name)
{
strcpy(szName, name);
}
void CEmployee::getName(char* name)
{
strcpy(name, szName);
}
void CEmployee::averageSalary(CEmployee e1, CEmployee e2)
{
salary = (e1.salary + e2.salary) / 2;
}
int main()
{
CEmployee e;
char name[30] = "Tom";
e.setName(name);
char theName[30];
e.getName(theName);
cout << theName << endl;
e.salary = 5000;
cout << e.salary << endl;
return 0;
}
使用C++写出了一个类,这个类可以计算平均成绩。
#include
#include
using namespace std;
class Student {
private:
string name; //姓名
int age; //年龄
int no; //学号
float x1, x2, x3, x4, score;//成绩
public:
Student()
{
age = 0; no = 0; score = 0;
x1 = 0; x2 = 0; x3 = 0; x4 = 0;
}
void input()
{
char t = ',';
getline(cin, name, t);
cin >> age >> t >> no >> t
>> x1 >> t >> x2 >> t >> x3 >> t >> x4;
}
void calculate()
{
score = (x1 + x2 + x3 + x4) / 4;
}
void output()
{
cout << name << ", " << age << ", " << no << ", " << score << endl;
}
};
/*
Tom, 18, 7817, 80, 80, 90, 70
*/
int main() {
Student student; // 定义类的对象
student.input(); // 输入数据
student.calculate(); // 计算平均成绩
student.output(); // 输出数据
}
通过这一部分的编程练习,读者可以巩固和完善以上知识点。
C++中,类的对象可以作为函数的形式参数。
#include
using namespace std;
class A
{
public:
int x;
int getX() { return x; }
};
void swap(
// 在此处补充你的代码
A &a, A &b
)
{
int tmp = a.x;
a.x = b.x;
b.x = tmp;
}
int main()
{
A a, b;
a.x = 3;
b.x = 5;
swap(a, b);
cout << a.getX() << "," << b.getX();
return 0;
}
此处C++代码中,使用了指针,这就需要考虑到变量的地址。指针也是变量,指针也有地址。
#include
using namespace std;
void swap(
// 在此处补充你的代码
int *&a, int *&b
)
{
int* tmp = a;
a = b;
b = tmp;
}
int main()
{
int a = 3, b = 5;
int* pa = &a;
int* pb = &b;
swap(pa, pb);
cout << *pa << "," << *pb;
return 0;
}
引用可以作为函数的返回值。
此处的代码,由于引用作为了函数的返回值,所以a[1]的值发生了改变,变为了10。
#include
using namespace std;
// 在此处补充你的代码
int &
getElement(int* a, int i)
{
return a[i];
}
int main()
{
int a[] = { 1,2,3 };
getElement(a, 1) = 10;
cout << a[1] << endl;
return 0;
}
此处需要注意二维数组的使用,需要注意new运算符的使用。
#include
using namespace std;
int main()
{
int* a[] = {
// 在此处补充你的代码
0,0,new int,new int[6]
};
*a[2] = 123;
a[3][5] = 456;
if (!a[0]) {
cout << *a[2] << "," << a[3][5];
}
return 0;
}
通过这里的编程填空,读者可以熟悉C++类的使用。
#include
#include
#include
#include
#include
#include
using namespace std;
class Student {
// 在此处补充你的代码
private:
string name; //姓名
int age; //年龄
int no; //学号
float x1, x2, x3, x4, score;//成绩
public:
Student()
{
age = 0; no = 0; score = 0;
x1 = 0; x2 = 0; x3 = 0; x4 = 0;
}
void input()
{
char t = ',';
getline(cin, name, t);
cin >> age >> t >> no >> t
>> x1 >> t >> x2 >> t >> x3 >> t >> x4;
}
void calculate()
{
score = (x1 + x2 + x3 + x4) / 4;
}
void output()
{
cout << name << "," << age << "," << no << "," << score << endl;
}
};
int main() {
Student student; // 定义类的对象
student.input(); // 输入数据
student.calculate(); // 计算平均成绩
student.output(); // 输出数据
}