VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 526|回复: 4

关于C++基础课程类的运算符重载

[复制链接]
93_avatar_middle
最佳答案
0 
在线会员 发表于 2021-6-16 16:42:16 | 显示全部楼层 |阅读模式
#pragma once
#include <string>
#include <iostream>
using namespace std;
class cstudent
{
public:
char* pname;
        char sex;
        int age;
        int num;
        cstudent();//构造函数
        cstudent(char* t_name,char t_sex,int t_age,int t_num);
        cstudent& operator=(const cstudent& stu);
        ~cstudent();//析构函数
};

#include "cstudent.h"

cstudent::cstudent()
{
        pname=NULL;//这个不能少。为什么,
};
cstudent::cstudent(char* t_name,char t_sex,int t_age,int t_num):sex(t_sex),num(t_num),age(t_age)
{
        int n_len=strlen(t_name);
        pname=new char[n_len+1];
        memset(pname,0,n_len+1);
        strcpy(pname,t_name);
};
cstudent& cstudent::operator=(const cstudent& stu)
{
        sex=stu.sex;
        num=stu.num;
        age=stu.age;
        if(pname)
        {
        delete [] pname;
        pname=NULL;
        }
        int name_len=strlen(stu.pname)+1;
        pname=new char[name_len];
        memset(pname,0,name_len);
        strcpy(pname,stu.pname);//把名子赋值过来
        return *this;
};
#include <string>
#include <iostream>
#include "cstudent.h"
using namespace std;
void test()
{
        cstudent stu01("zhangsan",'m',15,1002);
        cstudent stu02;
        stu02=stu01;//程序会出错,因为定义俩个对象后析构两次释放两次内存报错,要用运算符重载。
}
int main()
{
       
        test();
        return 0;
}

上面的构造函数里面必须有pname=NULL;否则程序会报错。其他代码和syc老师上课讲的一样,后来才发现是这里错了。




上一篇:MFC总是无法下载
下一篇:电脑端页面链接不上
31_avatar_middle
最佳答案
22 
在线会员 发表于 2021-6-16 23:08:48 | 显示全部楼层
变量没有初始化编译不能通过,新版本VS语法检查默认设置是严格的。
93_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-6-17 15:50:42 | 显示全部楼层
cpp2019 发表于 2021-6-16 23:08
变量没有初始化编译不能通过,新版本VS语法检查默认设置是严格的。

谢谢,为什么其他的没有设置初始化就没事呢,比如里面还有age,num,sex,这些。看来有用指针的地方还得多加注意。
31_avatar_middle
最佳答案
22 
在线会员 发表于 2021-6-17 18:09:34 | 显示全部楼层
睬鸟鸟 发表于 2021-6-17 15:50
谢谢,为什么其他的没有设置初始化就没事呢,比如里面还有age,num,sex,这些。看来有用指针的地方还得多 ...

基础类型变量没有初始化会给随机值,指针给随机值后果可想而知,是不安全的!
93_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2021-6-19 09:14:18 | 显示全部楼层
cpp2019 发表于 2021-6-17 18:09
基础类型变量没有初始化会给随机值,指针给随机值后果可想而知,是不安全的!

谢谢,这就是野指针,以后要注意了。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2021-7-24 18:33

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表