2020/3/31 学习笔记

1.对象数组
数组是有一定顺序关系的,同类型的数据集合。
对象是属于自定义类的实例。
我们可以由一个个对象构成数组,只要这些对象属于同一个类型就可以。这就是对象数组。
定义对象数组: 类名 数组名[元素个数];
访问对象数组元素:通过下标访问:数组名[下标].成员名
2.对象数组初始化
数组中每一个元素对象被创建时,系统都会调用类构造函数初始化该对象。
通过初始化列表赋值。例如:Point a[2]={Point(1,2),Point(3,4)};
如果没有为数组元素指定显式初始值,数组元素便使用默认值初始化(调用默认构造函数)。
数组元素的构造和析构:
构造数组时,元素所属的类未声明构造函数,则采用默认构造函数。
各元素对象的初值要求为相同的值时,可以声明具有默认形参值的构造函数。
各元素对象的初值要求为不同的值时,需要声明带形参的构造函数。
当数组中每一个对象被删除时,系统都要调用一次析构函数。
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 <iostream>
#include "Point.h"
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;
}

4.基于范围的for循环
C++11提供了一种新的循环语句,基于范围的for循环。他最擅长的就是自动遍历整个容器,比如数组就是一个容器,基于范围的for循环就可以不用我们控制循环次数,能自动把整个数组力的元素遍历一遍。例子:

#include <iostream>
//using namespace std;
int main()
{
    int array[3]={1,2,3};
    for(int & e:array)
    {
        e+=2;
        std::cout<<e<<std::endl;
    }

    return 0;
}

可以对比不使用基于范围的for循环:

#include <iostream>
using namespace std;
int main()
{
    int array[3]={1,2,3};
    int *p;
    for(p=array;p<array+sizeof(array)/sizeof(int);++p)
    {
        *p+=2;
        cout<<p<<endl;
    }

    return 0;
}

基于范围的for循环在处理容器类的时候更有用。

发布了6 篇原创文章 · 获赞 0 · 访问量 47

猜你喜欢

转载自blog.csdn.net/qq_18839043/article/details/105231088