目录
运算符重载
利用操作符重载我们可以实现两个对象的运算,使用的是operator关键字,使用规则是:
返回值 operator 运算符(对象A,对象B) {
具体操作
}
具体使用如下:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
//自定义的String类
class String
{
public:
std::string str;
String(std::string val) {
this->str = val;
}
//由于在类的内部定义的重载,所以默认会有当前类的引用
String operator +(const String& val) {
//进行两个字符串的拼接
String newStr(this->str + val.str);
return newStr;
}
};
void main() {
String str1("字符串1");
String str2("字符串2");
String str3 = str1 + str2;
std::cout << str3.str << std::endl;
system("pause");
}
当然运算符的重载也可以放在类的外面:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
//自定义的String类
class String
{
public:
std::string str;
String(std::string val) {
this->str = val;
}
};
String operator +(const String& val1,const String& val2) {
//进行两个字符串的拼接
String newStr(val1.str + val2.str);
return newStr;
}
void main() {
String str1("字符串1");
String str2("字符串2");
String str3 = str1 + str2;
std::cout << str3.str << std::endl;
system("pause");
}
效果都是一样的
当然也可以进行++和--,如下:
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
//自定义的String类
class String
{
public:
std::string str;
String(std::string val) {
this->str = val;
}
};
//++放在对象前面会执行这个方法
void operator ++(String& val) {
val.str = val.str + val.str;
}
//++放在对象后面会执行这个方法
void operator ++(String& val,int){
val.str = val.str + val.str;
}
void main() {
String str1("字符串1");
str1++;
//++str1;
std::cout << str1.str << std::endl;
system("pause");
}
友元函数
友元函数的目的是为了方便访问类的私有属性,用的是friend关键字,如下:
#include<stdlib.h>
#include<iostream>
class Student
{
private:
int age;
public:
//函数声明
friend void changeAge(Student& stu, int age);
};
void changeAge(Student &stu,int age) {
stu.age = age;
}
void main() {
system("pause");
}
如果将类内声明的changeAge函数删除的话,由于age是私有属性,所以外部的changeAge中就会报错:
当然也可以设置一个友元类,友元类的方法也是可以修改类的私有属性的:
#include<stdlib.h>
#include<iostream>
class Student
{
private:
int age;
public:
friend class Teacher;
};
class Teacher
{
public:
void changeStuAge(Student& stu, int age) {
stu.age = age;
}
};
void main() {
system("pause");
}