char-一个很低级的问题,怎么修改。

问题描述

一个很低级的问题,怎么修改。
#include
#include

class CStudent
{
public:
CStudent(char *n int a);
~CStudent();

private:
char *name;
int age;
};
CStudent::CStudent(char *n int a)
:age(a)
{
int nLen = strlen(n);
name = new char[nLen+1];
strcpy(namen);
name[nLen] = '';
}
CStudent::~CStudent()
{
delete[] name;
}

class CTeacher
{
public:
CTeacher(char *tn int ta);
~CTeacher();

void SetStuAge(int a);

private:
char *name;
int age;

CStudent stu;

};
CTeacher::CTeacher(char *tn int ta)
:age(ta)
{
int nLen = strlen(tn);
name = new char[nLen+1];
strcpy(nametn);
name[nLen] = '';
}
CTeacher::~CTeacher()
{
delete[] name;
}

void CTeacher::SetStuAge(int a)
{
stu.age = a;
}

void main()
{
CStudent stu(""张三""25);
CTeacher tea(""李四""26);
}

解决方案

 #include <iostream.h>#include <string.h>class CStudent{public:    CStudent(char *n int a);CStudent() { name=new char[100];}    ~CStudent();    int age;private:    char *name;};CStudent::CStudent(char *n int a):age(a){    int nLen = strlen(n);    name = new char[nLen+1];    strcpy(namen);    name[nLen] = '';}CStudent::~CStudent(){    delete[] name;}class CTeacher{public:    CTeacher(char *tn int ta);    ~CTeacher();    void SetStuAge(int a);private:    char *name;    int age;    CStudent stu;};CTeacher::CTeacher(char *tn int ta):age(ta){    int nLen = strlen(tn);    name = new char[nLen+1];    strcpy(nametn);    name[nLen] = '';}CTeacher::~CTeacher(){    delete[] name;}void CTeacher::SetStuAge(int a){    stu.age = a;}int main(){char s1[] = ""张三"";char s2[] = ""李四"";    CStudent stu(s125);    CTeacher tea(s226);}

解决方案二:
首先,将name初始化为0 : 一个普通的类成员不显式初始化就会被初始化为一个随机值,那么未指向任何有意义空间的指针如果不被置为 0 ,之后使用时天知道它指向的空间是否有效,并且对于动态内存来说,释放也成了一个问题
其次,考虑深拷贝 : 对于类成员有指针,并且这个指针用来指向一片动态申请的空间的情形,请考虑使用深拷贝,需重写复制构造函数和赋值操作符,否则默认的拷贝函数或者赋值操作(浅拷贝)会引起多个指针指向同一个空间的情形,由于你的程序本身考虑到了对动态空间的释放问题,那么多次释放同一空间,会引起段错误。

解决方案三:
e,抱歉,之前指出的问题在你这个程序中还体现不出来,你遇到的编译错误是 CTeacher tea(""李四""26); 的错误,原因是在CTeacher的构造函数中会初始化成员CStudent stu,而在CTeacher的构造函数中你没有显式地初始化stu,那么会自动调用CStudent::CStudent()这个CStudent的构造函数,但显然CStudent中没有这个构造函数
解决方式:
(1) 为CStudent添加无参构造函数
(2)显式初始化CStudent,如
CTeacher::CTeacher(char *tn int ta)
:age(ta), stu(""张三""25)
{
int nLen = strlen(tn);
name = new char[nLen+1];
strcpy(nametn);
name[nLen] = '';
}

时间: 2024-11-03 05:23:29

char-一个很低级的问题,怎么修改。的相关文章

java-新手问一个很奇怪的问题

问题描述 新手问一个很奇怪的问题 class Demo { int num = 1; int add = 2; Demo() { num = 5; add = 6; } void show() { System.out.println("Fu num="+num+" Fu add="+add); } } class DemoA extends Demo { DemoA() { this.num = 3; this.add = 4; } void show() { S

字符串-一个很基础的返回值问题

问题描述 一个很基础的返回值问题 想要打印字符串数组,去掉中间的空格和Tab,并且删除全为空的行,哪里有错?谢谢. #include #define MAXLINE 1000 int getline(char line[], int maxline); int copy(char to[],char from[]); int main(){ int len; int max; char line[MAXLINE]; max=0; while ((len=getline(line,MAXLINE)

c语言 单片机-keil4开发中遇到的一个很奇怪的问题。

问题描述 keil4开发中遇到的一个很奇怪的问题. void main(){ // uchar test_i; const uchar timp_button=0xfF; //this value is that the button havn't sticked uchar n_delay; //delay unsigned char j=0; unsigned char i; intend_initiation(); //调用时间设定程序 while(1){ if((hour==alarm_

代码-一个很奇怪的js不清楚到底是什么意思

问题描述 一个很奇怪的js不清楚到底是什么意思 Q x$=[ 'KKorupo1ikllkwKK', 'KKorupo1ikllkwKK', 'Drzpiq', 'orupoCryl', 'W1a1KmXmXmW', 'W1I1amW1m1Jm', 'AhhhmoitClpjjmuqAhhhmoitClpjjmzkAhhhmoitClpjjmzrTiAhhhmoitClpjjmqklAhhhmoitClpjjmrwtAhhhmoitClpjjmyrAhhhmoitClpjjmlGAhhhmoiG

leetcode-C++程序里面一个很奇怪的bug!跪求解释!!!

问题描述 C++程序里面一个很奇怪的bug!跪求解释!!! 这是我试图求解leetcode 第六题,这不重要,主要看一下程序里面那个if语句的执行 问题,不用看我针对这道题的逻辑对不对,这不是重点,重点是那个if语句!!! 在代码那个(***)的地方我给了注释!!! #include <iostream> #include <string> #include <cstring> using namespace std; int main() { string s; in

js-最近遇到一个很醉人的问题 我有两个项目 当我单独打开a项目的时候 ..

问题描述 最近遇到一个很醉人的问题 我有两个项目 当我单独打开a项目的时候 .. 最近遇到一个很醉人的问题 我有一个项目 分为两次打开 当我单独打开a项目的时候 里面的有个功能是缺失的关掉后 打开b项目那个功能又恢复了 a和b是相同的项目 他们的代码是一样的 更有意思的是当我两个项目都运行的时候 a和b的功能又全都恢复了 我关掉B 再次运行A 功能又缺失了 解决方案 我猜测应该去对比一下配置文件跟机器的运行环境的log文件

android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事。

问题描述 android,一个很简单的demo,一运行就出错,谁能帮我看看怎么回事. eclipse上也没有错误提示,怎么运行不了.安装好就提示停止运行. 文件 解决方案 看logcat的日志,或者进入调试模式运行,一步步调 解决方案二: 亲,绑定布局空间是要通过布局管理者来获取的,不然就是空指针错误.具体如下 解决方案三: 用调试模式调试吧,很方便的. 解决方案四: 要看log日志的啊.看日志才知道哪里出错了, 解决方案五: fragment控件初始化的问题吧 解决方案六: fragment控

绘图-MATLAB做一个很简单的图

问题描述 MATLAB做一个很简单的图 用matlab把下面这个表格实现,横坐标表示字种数,纵坐标表示百分比,具体怎么实现,多谢了 解决方案 可以呀,把plot改为bar 解决方案二: x=[500 1000 1500 2000 2500 3000 3500 4000];y=[78.53 91.92 96.48 98.39 99.24 99.63 99.82 99.92];plot(xy) 解决方案三: 想请你半个忙,如果可以加我QQ:815359755 解决方案四: x=[500 1000 1

ORACLE监听程序打开后自动关闭,一个很常见却很棘手的问题

问题描述 ORACLE监听程序打开后自动关闭,一个很常见却很棘手的问题 这个是打开监听时候报的错误. 命令行启动报错 现在主机名 listener.ora tnsnames.ora 问题出在哪里了? 我自己也在找办法解决,c币有限,只是希望遇到过类似问题的朋友分享下自己的经验.问题解决之后希望可以给大家带来便利