TA-1:C++语言的特性

2020/01/05

C++语言的特性

类与对象

类的概念及基本语法

  • 类是一个具有相似特性的物体集合,其中具体的一个物体就被称作为对象。

    例子:所有手机可以被定义为一个类,每个手机都可以被称为一个对象。对于一类物体,我们可以施以同样的操作,比如开关机、调整手机的亮度等,以上被称为这个类的方法,我们可以使这个类执行这些方法。但对于每一个对象,他们可以有不同的属性,对于手机而言,他们可能存在不同的运营商,不同的电量等属性

  • 从类到对象的过程,我们称为实例化。
  • 对于类而言,有共同特点(变量)、归纳行为(函数)
    • 构成数据结构、操作数据结构
  • 类与结构体的区别

定义类

class Rectangle{
    public:
	int w,h;
	int area(){
	    return w*h;
	}
	int perimeter(){
	    return 2 * (w + h);
	}
	void init(int w_, int h_){
	    w = w_; h = h_;
	}
};//分号

使用类

int main(){
    int w, h;
    Rectangle r; // r是一个对象
    cin >> w >> h;
    r.init(w, h);
    cout << r.area() << endl << r.perimeter();
    return 0;
}

如果是像定义变量一样定义的类,则需要用“.”来使用类的成员函数;如果是定义的类是一个指针,则需要用“->”来调用类的成员函数;如果是通过引用来定义的类,则需要用“.”来使用类的成员函数。

同时,我们也可以将声明和定义分离

class Rectangle{
    public:
        int w,h;
	int area()//成员函数的声明
	int perimeter()
	void init(int w_, int h_)
};//分号
int Rectangle::area(){return w*h;}
int Rectangle::perimeter(){return 2*(w+h);}
void Rectangle::init(int w_, int h_){w = w_; h = h_;}

“::”表示area()这个函数是Rectangle这个类的成员函数;

  • 访问权限:private(只能在成员函数中访问),public(可以在任何地方访问),protected

    举个例子:对于手机这个类来说,手机电量这个变量就应该被设计为private的,不然用户自身可以随意电量

默认函数

当我们生成一个类的时候,会有一些函数默认生成(基本操作):

  • 构造函数与析构函数
  • 复制操作(复制构造函数)
  • 取地址

this指针

this指针:并非对象的成员,是常量指针;每个对象可以使用this指针访问自己的地址,但this并不是这个类的真实成员(sizeof来看类的真实大小,this是不计数的);非static成员函数调用时,this指针为隐式参数

用途:防止字符值、返回以连续调用

this的例子

class complex{
    float real,imag;//默认是private
    public:
	complex * returnaddress(){
	    return this;
	}
	float returnreal(){
	    return this -> real;
	}
}

函数模板与类模板

对于不同的数据类型,我们设计的算法通用,对于每一个数据类型都定义一个函数是麻烦的,函数模板解决了这个问题。

一个应用于输出函数的例子

template<class T>
void print(const T array[], int size){
    int i;
    for(i = 0; i < size; i++)
    {
	cout<<array[i];
    }
}

在定义类的时候给它一个或多个参数,这些参数表示不同的数据类型。在调用类模板时,指定参数,由编译系统根据参数提供的数据类型自动产生相应的类模板。

类模板的定义

template <class T>
class C{
    T * ptr;
    int size;
public:
    C(int length);
    ~ C();
    int len();
    void setElement(T arg, int index);
    T getElement(int index);
}

在使用类模板声明对象

C <int> arrayInt(50), *ptrArray;

创建一个元素类型为int的C模板类,并声明该模板类的一个对象以及一个指针。

标准输入输出流

  • 标准输入流 cin >> x;读入整型数时以第一个非数字为终结;读入字符串时以第一个空格、tab或者换行符为终结
  • 标准输出流 cout << y;

  • 流操作算子 cout << setprecision(6) << x << endl; (float)保留有效数字

    cout << setiosflags(ios::fixed) << setprecision(6)......保留小数点后几位

    cin.width(5)设置输入宽度,只对之后的一句有效

Post Directory