C++语言程序设计之类和对象初步

1 编程练习一

        在编程练习一中,读者能学习到引用、常引用的概念和用法,以及C++中类的使用方法、类成员的可访问范围,还有使用C++编写学生信息处理程序的方法。

1.1 引用的示例程序

        代码写明了引用的概念和使用方法。

1.1.1 设计代码

#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;
}

1.1.2 执行结果

C++语言程序设计之类和对象初步_第1张图片 图1 引用的示例程序代码执行结果

1.2 引用作为函数的返回值

        引用可以作为函数的返回值,函数返回的是对变量的引用。

1.2.1 设计代码

#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;
}

1.2.2 执行结果

图2 引用作为函数的返回值代码执行结果

1.3 常引用

        char变量可以用来初始化const char&的引用。

1.3.1 设计代码

#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;
}

1.3.2 执行结果

图3 常引用代码执行结果

1.4 string对象用法示例

        在C++中,使用string来处理字符串非常方便。

1.4.1 设计代码

/* 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;
}

1.4.2 执行结果

C++语言程序设计之类和对象初步_第2张图片 图4 string对象用法示例代码执行结果

1.5 类的示例程序剖析

        在类的示例程序中,读者可以学到使用C++写类并创建对象的方法。

1.5.1 设计代码

/* 矩形类 */

#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;
}

1.5.2 执行结果

C++语言程序设计之类和对象初步_第3张图片 图5 类的示例程序剖析代码执行结果

1.6 类成员的可访问范围

        通过一个企业员工管理程序,向读者说明了类的对象不可直接访问类的私有成员变量。

1.6.1 设计代码

/* 企业员工管理程序 */

#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;
}

1.6.2 执行结果

图6 类成员的可访问范围代码执行结果

1.7 学生信息处理程序

        使用C++写出了一个类,这个类可以计算平均成绩。

1.7.1 设计代码

#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();       // 输出数据
}

1.7.2 执行结果

图7 学生信息处理程序代码执行结果

2 编程练习二

        通过这一部分的编程练习,读者可以巩固和完善以上知识点。

2.1 简单的swap

        C++中,类的对象可以作为函数的形式参数。

2.1.1 设计代码

#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;
}

2.1.2 执行结果

图8 简单的swap代码执行结果

2.2 难一点的swap

        此处C++代码中,使用了指针,这就需要考虑到变量的地址。指针也是变量,指针也有地址。

2.2.1 设计代码

#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;
}

2.2.2 执行结果

图9 难一点的swap代码执行结果

2.3 好怪异的返回值

        引用可以作为函数的返回值。

        此处的代码,由于引用作为了函数的返回值,所以a[1]的值发生了改变,变为了10。

2.3.1 设计代码

#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;
}

2.3.2 执行结果

图10 好怪异的返回值代码执行结果

2.4 神秘的数组初始化

        此处需要注意二维数组的使用,需要注意new运算符的使用。

2.4.1 设计代码

#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;
}

2.4.2 执行结果

图11 神秘的数组初始化代码执行结果

2.5 编程填空:学生信息处理程序

        通过这里的编程填空,读者可以熟悉C++类的使用。

2.5.1 设计代码

#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();       // 输出数据
}

2.5.2 执行结果

图12 学生信息处理程序(编程填空)代码执行结果

3 解题心得

  • 引用可以作为函数的返回值,char变量可以用来初始化const char&的引用。
  • string对象用来处理字符串非常方便。
  • C++编写类的代码,并创建对象,由此开始了C++面向对象编程的代码编写。
  • C++类成员具有不同的可访问范围,默认是private的。
  • 类对象可以作为函数的形式参数,函数的形式参数也可以是指针。
  • 数组初始化中,需要注意new运算符的两种用法。

你可能感兴趣的:(C++程序设计,c++,开发语言,算法)