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;
}