-halo- 2022-09-02 18:50 采纳率: 100%
浏览 50
已结题

DEV C++中能运行,VS2019中无法运行,就一个strcpy和strcpy_s的区别,.为啥啊

假设某公司有两类员工:经理、销售员。试定义表示经理信息的类Manager和表示销售员信息的类Sales,它们都有共同的基类Base,实现简单的公司工资管理。员工月工资的计算方法是:销售员按销售额的4%提成;经理的月工资底薪为5000元,另外加上所有销售员销售总额的5‰。具体要求如下:
(1)定义基类Base:
保护成员
l char *no, *name:存放员工工号和姓名。
l float salary:存放员工工资。
l static float total:静态成员,存放所有销售员的销售总额。
公有成员
l Base(char *p1, char *p2):构造函数,分别利用字符串p1、p2初始化员工工号和姓名,salary置0。
l ~Base() : 析构函数,释放动态内存空间。
(2)定义表示销售员信息的类Sales。该类为类Base的派生类,新增成员如下:
私有成员
l float sale : 存放销售员的销售额。
公有成员
l Sales(char *p1, char *p2):构造函数, 分别利用字符串p1、p2初始化工号和姓名,销售额sale置0。
l void set(float x):利用参数x设置销售员的销售额,计算销售员的工资,更新所有销售员的销售总额total。
l void print():输出职位(销售员)、工号、姓名、工资及销售额。
(3)描述经理信息的类Manager。该类为类Base的派生类,新增成员如下:
公有成员
l Manager(char *p1, char *p2):构造函数, 分别利用字符串p1、p2初始化工号和姓名。
l void set():计算经理的工资。
l void print():输出职位(经理)、工号、姓名、工资及销售总额。

#include
using namespace std;

class Base
{
protected:
char* no, * name;
float salary;
static float total;
public:
Base(char* p1, char* p2);
~Base();
};
float Base::total = 0;

Base::Base(char* p1, char* p2)
{
no = new char[strlen(p1+1)]; name =new char[strlen(p2+1)];
strcpy_s(no, strlen(p1 + 1), p1);
strcpy_s(name, strlen(p2 + 1), p2);
salary = 0;
}
Base::~Base()
{
if (*no)
{
delete no;
no = nullptr;
}
if (*name)
{
delete name;
name = nullptr;
}
}

//销售员类
class Sales:public Base
{
float sale;
public:
Sales(char* p1, char* p2);
void set(float x);
void print();
};
Sales::Sales(char* p1, char* p2):Base(p1,p2)
{
sale = 0;
}
void Sales::set(float x)
{
total = x;
salary = x * 0.04;
}
void Sales::print()
{

cout << "销售员" << '\t' << no << '\t' << name << '\t' << salary << '\t' << total << endl;

}

//经理类
class Manager:public Base
{
public:
Manager(char* p1, char* p2);
void set();
void print();
};
Manager::Manager(char* p1, char* p2):Base(p1,p2)
{
}
void Manager::set()
{
salary = 5000 + total * 0.05;
}
void Manager::print()
{
cout << "经理" << '\t' << no << '\t' << name << '\t' << salary << '\t' << total << endl;
}

int main()
{
char n1[4] = "001";
char n2[10] = "002";
char n3[10] = "003";
char n4[10] = "000";
char name1[4] = "B01";
char name2[10] = "B02";
char name3[10] = "B03";
char name4[10] = "A00";
cout << "职位" << '\t' << "工号" << '\t' << "姓名" << '\t' << "工资" << '\t' << "销售(总额)" << endl;
Sales s1(n1, name1);
s1.set(60000);
s1.print();
Sales s2(n2, name2);
s2.set(70000);
s2.print();
Sales s3(n3, name3);
s3.set(80000);
s3.print();
Manager m1(n4, name4);
m1.set();
m1.print();

return 0;

}
解决了,把长度写错了,写成strlen(p+1)了,加一应该在外面,但是DEV里不报错,为啥啊,括号里的p+1是啥意思,指向new出的内存空间里的下一个位置吗?

  • 写回答

4条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-02 19:02
    关注
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 9月6日
  • 已采纳回答 9月6日
  • 修改了问题 9月4日
  • 创建了问题 9月2日

悬赏问题

  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分
  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 linux驱动,linux应用,多线程