c++构造函数char型指针要重新申请存储空间

5-2 派生类的构造函数

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

要求定义一个基类Person,它有3个protected的数据成员:姓名name(char
*类型)、性别
sex(char类型)、年龄age(int类型);一个构造函数用于对数据成员初始化;有一个成员函数show()用于输出数据成员的信息。

共5个数据,分别代表姓名、性别、年龄、基本工资、请假天数。

输出

<p class="\"cjk\"" margin-bottom:="" "="">如示例数据所示,共5行,分别代表姓名、年龄、性别、基本工资、请假天数

示例输入

zhangsan m 30 4000 2

示例输出

name:zhangsan
age:30
sex:m
basicSalary:4000
leavedays:2
c++构造函数char型指针要重新申请存储空间,不然每一次都是同一个地址值。。


#include<iostream>
#include<iomanip>
#include<algorithm>
#include<cstring>
using namespace std;
class person
{
protected:
    char *name;
    char *sex;
    int age;
public:
    person(char *a,char *b,int c):age(c)
    {
        name=new char[strlen(a)+1];
        strcpy(name,a);
        sex=new char[strlen(b)+1];
        strcpy(sex,b);
    }
    void show()
    {
        cout<<"name:"<<name<<endl<<"age:"<<age<<endl<<"sex:"<<sex<<endl;
    }
};
class employee:public person
{
    int salary;
    int dayoff;
public:
    employee(char *a,char*b,int c,int d,int e):person(a,b,c),salary(d),dayoff(e){}
    void show()
    {
        cout<<"basicSalary:"<<salary<<endl;
        cout<<"leavedays:"<<dayoff<<endl;
    }
};
int main()
{
    char a[20],b[20];
    int c,d,e;
    while(cin>>a>>b>>c>>d>>e)
    {
        employee employ(a,b,c,d,e);
        employ.person::show();
        employ.show();
    }
}   

/**************************************
    Problem id  : SDUT OJ 2712
    User name   : linjiaiqn
    Result      : Accepted
    Take Memory : 500K
    Take Time   : 0MS
    Submit Time : 2014-07-20 23:01:54
**************************************/  
时间: 2024-11-03 03:13:30

c++构造函数char型指针要重新申请存储空间的相关文章

C语言:int型指针与char型指针本质

---恢复内容开始--- 我的理解是,不管定义时将指针定义成何种类型,指针本质上都是一个数字,其位数由编译器来决定. 比如我的编译器是32位,那么无论是定义一个char *pc还是定义一个int *pi,本质上pc与pi都是一个32位的数,但是由于"char *" 和 "int *"的限制,所以pc++是自加8bit,而pi++是自加16bit. 1 // int指针与char指针.cpp : 2 // 看看“char型指针”与“int型指针”本质上有什么区别 3

char型字符串(数组)与string型字符串 指针与引用

一.常指针: int *const p;    //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p;    //指针可以改变,但是指针指向的数据不可以改变. 指向常量的常指针: const int *const p;    //指针不可改变,且指针指向的数据也不可改变. 引用就是别名,定义引用的同时必须要对引用进行初始化. 二.利用引用返回多个值: 引用就是别名,引用必须要初始化. #include "stdafx.h" #include <

c++中指针的内存申请和内存释放问题

C++中指针在new和delete操作的时候对内存堆都做了些什么呢,以下解: 1.指针的new操作: 指针在new之后,会在内存堆中分配一个空间,而指针中存放的是这个空间的地址.如: void main(){ int *p = new int(4); cout << p << endl; cout << *p << endl; } 输出为: 0x00431BF0 4 分别为分配的空间地址和地址内存放的值. 如果写为: void main(){ int *p

C++中cout输出字符型指针地址值的方法

#include<iostream> #include<string> using namespace std; int main(){ char c[3]={'a','b','c'}; char *p=c; cout<<*p<<' '<<(void*)p<<endl; cout<<*(p+1)<<' '<<static_cast<void*>(p+1)<<endl; cou

c++输出char型变量与字符串的地址

在c里面如果指针是一个基本数值型 int ,foalt ,long等,如果输出里有 cout << ptr << endl; 其中ptr是指针的名,则输出的值是指针的地址, 如果是char * (char指针) 则输出的是char指针的值. 在C++中,熟悉int和char型的变量是最基本不过的了,不过,我想,很多初学者会跟我一样,搞不懂如何输出一个char变量的地址?就举下面一个例子: int i=97; char c='a'; cout<<"line 1:

关于char型与unsigned char型数据使用格式化输出注意点

在使用 socket(AF_INET, SOCK_DGRAM, 0); 打开一个套接字流,通过 ioctl(s, SIOCGIFHWADDR, &ifr) 获取网卡的mac地址的时候,需要将 struct ifreq ifr; 结构体中 ifr.ifr_hwaddr.sa_data 数组中的信息按照十六进制提取到字符串中去,程序中使用到了 sprintf(mac, "%02X:%02X:%02X:%02X:%02X:%02X", ifreq.ifr_hwaddr.sa_data

关于指针 用字符数组,字符指针变量输入字符串 动态为字符型指针变量分配内存

#include <stdio.h> #include <iostream> #include<math.h> using namespace std; int main() { //声明字符型数组和指针变量 char str[10]; char *strip=str; //输入输出 cout<<"str="; cin>>str; //用字符数组输入字符串 cout<<"str="<<

C++中cout输出字符串和字符串型指针地址值的方法以及C语言中的printf用法比较

#include <iostream> using namespace std; #include <stdio.h> int main() { char *pstr = "china"; char *qstr = "america"; char *q = "adf"; char * s; s = "hello"; printf("pstr = %p\n", pstr); /*输出为

复习一下整型数组,字符数组,整型指针数组,字符指针数组,整型数组指针,字符数组指针

20:52:01 2019-12-31 整型数组 int a[10];字符数组 char b[10]; _______________________整型指针数组 int *p[10]; |__|__|__|__|__|__|__|__|__| 每个格子里存的是一个指针,每个指针都是int类型的,会指向一个int的值. 1 for(int i=0; i<10; i++) 2 p[i] = &a[i]; //把a中的每个元素的地址都放在了指针数组p里. 3 4 for(int j=0; j&l