C++struct结构体的用法

mac2024-04-20  38

1. struct声明

无 typedef 的声明方式

struct Person{ // Peson 为结构体标志 int age; string name; }person_a, person_b; // 声明之后直接创建变量 struct Person person_c; // 需要的时候创建

有 typedef 的声明方式

typedef struct { int age; string name; }Person; // 这里 `Person` 不是变量,而是类型名 Person person_d; // 也可以通过这种方式创建变量

一般情况下结构体标志, 结构体成员列表, 变量名列表一般要有两个.

2. C和C++结构体的区别

C++ 的结构体可以包含函数, 与 class 的区别是, struct 的所有成员都是 public的.

3. this 指针

它是指向本类对象(或体结构体变量)的指针,它的值是当前被调用的成员函数所在的对象的起始地址。*this 就是 this 所指向的结构体变量。return *this 就是返回当前结构体变量值 .

4. 运算符重载

c++ 预先定义的操作符(如>, +)的操作类型只能是基本数据类型(如 int), 自定义类型需要类似的运算时需要重载. 运算符重载的格式如下:

函数类型 operator 运算符名称(形参表列){对运算符的重载处理} const Person& operator=(const Person& person_x) { age = person_x.age; name = person_x.name; }

例子:

#include<iostream> using namespace std; struct Complex { double real,imag; Complex(double r=0,double i=0) { real=r; imag=i; } Complex operator + (Complex &c2);//声明运算符的"+"函数 void display(); }; Complex Complex::operator+(Complex &c2) //在结构体外定义结构体的成员函数用:: { Complex c; c.real=real+c2.real; c.imag=imag+c2.imag; return c; } void Complex::display() { cout<<"("<<real<<","<<imag<<"i)"<<endl;} istream & operator >>(istream & input,Complex &c) //重载>>运算符用于输入数据,因结构体里变量是公有成员,不用声明为友元函数,可直接引用成员 {input>>c.real>>c.imag; return input;} ostream & operator <<(ostream & output,Complex &c) //重载<<运算符用于输出数据 {output<<"("<<c.real<<"+"<<c.imag<<"i)"; return output;} int main() { Complex c1(3,4),c2(5,-10),c3; c3=c1+c2; cout<<"c1="; c1.display(); cout<<"c2="; c2.display(); cout<<c3; //和 c3.display();等价 return 0; }
最新回复(0)