Part6 数组、指针与字符串 6.2 数组作为函数的参数 6.3对象数组 6.4基于范围的for循环

 6.2 数组作为函数的参数

数组元素作实参,与单个变量一样。
数组名作参数,形、实参数都应是数组名(实质上是地址),类型要一样,传送的是数组首地址。
对形参数组的改变会直接影响到实参数组。

//6-2 使用数组名作为函数参数
//主函数中初始化一个二维数组,表示一个矩阵,矩阵,并将每个元素都输出
//然后调用子函数,分别计算每一行的元素之和,将和直接存放在每行的第一个元素中,返回主函数之后输出各行元素的和。
#include<iostream>
using namespace std;
void rowSum(int a[][4], int 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 << "Sum of row " << i << " is " << table[i][0] << endl;
    return 0;
}

 

 


6.3对象数组
对象数组初始化:
  数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。
  通过初始化列表赋值:
    例: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 <iostream>
#include "Point.h"
using namespace std;
Point::Point() : x(0), y(0) {
    cout << "Default Constructor called." << endl;
}
Point::Point(int x, int y) : x(x), y(y) {
    cout << "Constructor called." << endl;
}
Point::~Point() {
    cout << "Destructor called." << endl;
}
void Point::move(int newX, int newY) {
    cout << "Moving the point to (" << newX << ", " << newY << ")" << endl;
    x = newX;
    y = newY;
}

//main.cpp
#include "Point.h"
#include <iostream>
using namespace std;
int main() {
    cout << "Entering main..." << endl;
    Point a[2];
    for (int i = 0; i < 2; i++)
        a[i].move(i + 10, i + 20);
    cout << "Exiting main..." << endl;
    return 0;
}

 

 


6.4基于范围的for循环

//老方法
int main(){
    int array[3] = {1,2,3};
    int *p;
    for(p = array; p < array + sizeof(array)/sizeof(int); ++p){//注意+p和+*p的区别
        *p += 2;
        std::cout << *p << std::endl;
    }
    return 0;
}
//基于范围的for循环
int main(){
    int array[3] = {1,2,3};
    for(int &e:array){
        e += 2;
        std::cout << e << std::endl;
    }
    return 0;
}

 

posted @ 2017-12-05 13:40  LeoSirius  阅读(285)  评论(0编辑  收藏  举报