主函数中初始化一个二维数组,表示—个矩阵,并将每个元素都输出,然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第—个元素中.返回主函数之后输出各行元素的和。
//例6_2 使用数组名作为函数参数.cpp(P193) #include
void rowSum(int a[][4], int nRow) {//计算二维数组A每行元素的值的和,nrow是行数
for (int i = 0; i < nRow; i++) { for(int j = 1; j < 4; j++) a[i][0] += a[i][j]; } }
int main() {//主函数
int table[3][4] = { {1, 2, 3, 4}, {2, 3, 4, 5}, {3, 4, 5, 6} };//声明并
初始化数组
for (int i = 0; i < 3; i++) {//输出数组元素 for (int j = 0; j < 4; j++)
cout << table[i][j] << \; cout << endl; }
rowSum(table, 3);//调用子函数,计算各行和
for (int i = 0; i < 3; i++) //输出计算结果
cout << \ << i << \ << table[i][0] << endl;
return 0; }
运行结果:
6.1.4 对象数组
对象数组的定义与访问 ● 定义对象数组
类名 数组名[元素个数]; ● 访问对象数组元素 通过下标访问 数组名[下标].成员名 对象数组初始化
● 数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。 ● 通过初始化列表赋值。
例:Point a[2]={Point(1,2),Point(3,4)};
● 如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)。
数组元素所属类的构造函数
● 元素所属的类不声明构造函数,则采用默认构造函数。
● 各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。 ● 各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。 ● 当数组中每一个对象被删除时,系统都要调用一次析构函数。 例6-3 对象数组应用举例
//Point.h
#ifndef _POINT_H #define _POINT_H
class Point {//类的定义
public: //外部接口
Point();
Point(int x, int y); ~Point();
void move(int newX,int newY); int getX() const { return x; } int getY() const { return y; } static void showCount();//静态函数成员
private://私有数据成员
int x, y;
};
#endif //_POINT_H 防止头文件被加载两次或以上
//Point.cpp
#include
Point::Point() { x = y = 0;
cout << \ << endl; }
Point::Point(int x, int y) : x(x), y(y) { cout << \ << endl; }
Point::~Point() {
cout << \ << endl; }
void Point::move(int newX,int newY) {
cout << \ << newX << \ << newY << \ << endl;
x = newX; y = newY; }
//例6_3 对象数组应用举例.cpp(P194) #include \ #include
int main() {
cout << \ << endl; Point a[2];
for(int i = 0; i < 2; i++) a[i].move(i + 10, i + 20);
cout << \ << endl;
return 0; }
运行结果:
6.1.5 基于范围的for循环
int main() {
int array[3] = {1,2,3}; int *p;
for(p = array; p < array + sizeof(array) / sizeof(int); ++p) {
*p += 2;
std::cout << *p << std::endl; }
return 0; }
int main() {
int array[3] = {1,2,3}; for(int & e : array)
{
e += 2;
std::cout< return 0; } 例6_4 利用Point类进行点的线性拟合 //例6_4 利用Point类进行点的线性拟合.cpp(P196) //Point.h #ifndef _POINT_H #define _POINT_H class Point { //Point类的定义 public: //外部接口 Point(float x = 0, float y = 0) : x(x), y(y) { } float getX() const { return x; } float getY() const { return y; } private: //私有数据成员 float x, y; }; #endif //_POINT_H //例6_4 利用Point类进行点的线性拟合.cpp(P196) #include \ #include using namespace std; //直线线性拟合,points为各点,nPoint为点数 float lineFit(const Point points[], int nPoint) { float avgX = 0, avgY = 0; float lxx = 0, lyy = 0, lxy = 0; for(int i = 0; i < nPoint; i++) { //计算x、y的平均值 avgX += points[i].getX() / nPoint; avgY += points[i].getY() / nPoint;