类的基本知识总结

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
struct Mode2;     //当两个结构体相互友元时,注意未出现结构体的声明
struct Mode{
private:
char * n;
public:
Mode();    //构造函数与析构函数是没有返回值的
~Mode();
void set_n(char * );
void get_n();
Mode operator ++(int);   //要用用int型
Mode operator +(char *);
void show(Mode2 &);
friend Mode operator +(char *, Mode &);    
friend Mode operator ++(Mode &);      //非成员函数的重载要用类类型或者枚举型
friend struct Mode2;
};
struct Mode2
{
private:
int num;
public:
void show(Mode& );
friend struct Mode;
};
Mode::Mode() {
cout << "Mode" << endl;
}
Mode::~Mode() {
cout << "~Mode" << endl;
}
void Mode::set_n(char * ch) {
n = ch;
}
void  Mode::get_n() {
cout << "Mode.n : " << n << endl;
}
Mode Mode::operator+(char * ch) {    //写在函数内部的函数重载的前提是左边操作数的类型是类类型的
strcat(n, ch);
return *this;
}
Mode Mode::operator++(int ) {    //后++返回之前的数据,但是本身在变化
Mode temp = *this;    //this 是一个指向自己的指针,返回它的值
int len = strlen(n);       //这里用strlen得到字符数组的具体长度而不是它一共所占的空间,指针的大小是4个字节,char是一个
cout <<"len:"<< len << endl;
for (int i = 0; i < len; i++) { 
n[i] += 1;
}
return temp;    
}
Mode operator +(char *ch, Mode &m) {    //当操作数的类型不是类类型的时候,应该写在函数的外面
strcat(ch, m.n);
return m;
}
Mode operator ++(Mode &m ) {       //前++
int len = strlen(m.n);
cout << "m.n : " << len << endl;
for (int i = 0; i < len; i++) {
m.n[i] += 1;
}
return m;
}
void Mode2::show(Mode & a) {
a.n = "qqqq";
cout << "n : "<<a.n << endl;
}
void Mode::show(Mode2 & a) {
a.num = 33;
cout << "num : " <<a.num<< endl;
}


int main() {
Mode m1;
Mode2 m2;
char *p = new char[100];
cout << "请输入一段字符串:" << endl;
cin >> p;
m1.set_n(p);
m1.get_n();
m1++;
m1.get_n(); 
++m1;
m1.get_n();       //无论前++还是后++由于函数返回的都是改变以后的值,所以两个的返回值偶增加了
m2.show(m1);
delete p;
p = NULL;     //动态分配的内存要记得用完后销毁掉
return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值