| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 714 人关注过本帖
标题:请前辈比较两个程序,一个有问题一个没问题,为什么?
只看楼主 加入收藏
heboqian
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
请前辈比较两个程序,一个有问题一个没问题,为什么?
下面两个程序做比较,为什么第一个程序没问题,第二个程序有问题?
第一个程序:

#include <iostream>
#include <string.h>

class Student
{
public:
    Student::Student(char *n = "zhangsan", int a = 23, int i = 1009, int g = 3, int r = 90)
    {
        strcpy(name,n);
        age = a;
        id = i;
        grade = g;
        result = r;
        std::cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << std::endl;
    }
protected:
    char name[30];
    int age;
    int id;
    int grade;
    int result;
};

int main()
{
    Student st("lisi");
    return 0;
}

第二个程序:

#include <iostream>
#include <string.h>

class Student
{
public:
    Student::Student(char *n, int a, int i, int g, int r);
protected:
    char name[30];
    int age;
    int id;
    int grade;
    int result;
};

int main()
{
    Student st("lisi");
    return 0;
}

Student::Student(char *n = "zhangsan", int a = 23, int i = 1009, int g = 3, int r = 90)
{
    strcpy(name,n);
    age = a;
    id = i;
    grade = g;
    result = r;
    std::cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << std::endl;
}
搜索更多相关主题的帖子: 请前辈比较程序 
2009-08-13 12:05
xufen340
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
帖 子:166
专家分:1351
注 册:2009-8-7
收藏
得分:20 
构造函数参数默认值的概念。
第一个:
由于参数有默认值,调用构造函数可以省参数。
第二个:
参数没有默认值,没有调用构造函数,编译器错误调用拷贝构造函数。参数出错.
2009-08-13 12:20
heboqian
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2009-7-22
收藏
得分:0 
回复 2楼 xufen340

谢谢前辈,我再好好看看这块的知识吧
2009-08-18 10:20
战龙
Rank: 2
等 级:论坛游民
帖 子:37
专家分:17
注 册:2008-4-2
收藏
得分:0 
程序代码:
#include <iostream>
#include <string.h>

class Student
{
public:
    Student(char *n, int a, int i, int g, int r);
protected:
    char name[30];
    int age;
    int id;
    int grade;
    int result;
};

Student::Student(char *n = "zhangsan", int a = 23, int i = 1009, int g = 3, int r = 90)
{
    strcpy(name,n);
    age = a;
    id = i;
    grade = g;
    result = r;
    std::cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << std::endl;
} 

int main()
{
    Student st("lisi");
    return 0;
}
这样就没问题了
2009-08-21 16:11
serious
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:81
专家分:497
注 册:2009-8-18
收藏
得分:0 
纯C++的程序
&lt;string.h> 是 "deprecated", 你应该用 &lt;cstring>
但是 "std::string" 比 "char*" 容易的
而且你可以用 "initialization list"

这个程序是纯C++ :
程序代码:
#include <iostream>
#include <string>

using namespace std;

class Student
{
    public:
            Student(string n, int a, int i, int g, int r);
    protected:
            string name;
            int age;
            int id;
            int grade;
            int result;
};

Student::Student(string n = "zhangsan", int a = 23, int i = 1009, int g = 3, int r = 90)
    : name(n), age(a), id(i), grade(g), result(r) // "Initialization list"
{
    cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << endl;
}


int main()
{
    Student st("lisi");

    return 0;
}


[ 本帖最后由 serious 于 2009-8-23 01:09 编辑 ]
2009-08-23 01:08
newCpp
Rank: 5Rank: 5
来 自:火星
等 级:职业侠客
威 望:3
帖 子:256
专家分:375
注 册:2009-8-17
收藏
得分:0 
晕死了。看不懂

编程语言视频教程在线播放学习
2009-08-23 08:18
阿闲
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-7-31
收藏
得分:0 
马后炮:
    如果在#include<iostream>,后面加上using namepace std;
那后面的std::cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << std::endl;可以写成
cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << endl;
这可是个好习惯啊。
2009-08-23 15:55
bubuhui
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2007-4-19
收藏
得分:0 
楼主   第二个程序里面   Student::Student(char *n, int a, int i, int g, int r);后面的分号错了 应该是;
构造函数放main函数之前就可以了 是一样的
2009-08-25 00:11
serious
Rank: 6Rank: 6
等 级:侠之大者
威 望:1
帖 子:81
专家分:497
注 册:2009-8-18
收藏
得分:0 
马后炮:
    如果在#include<iostream>,后面加上using namepace std;
那后面的std::cout &lt;&lt; name << "  " << age << "  " << id << "  " << grade << "  " << result << std::endl;可以写成
cout << name << "  " << age << "  " << id << "  " << grade << "  " << result << endl;
这可是个好习惯啊。


但是不必须用"using"头文件里面

比如 :
test.h :
using namespace std;


test.cpp :
程序代码:
#include "test.h"

#include <vector>

class vector
{
};

int main(void)
{
    vector v1;// 汇编错误
    ::vector v2; // 好
}


[ 本帖最后由 serious 于 2009-8-25 04:53 编辑 ]
2009-08-25 04:50
lnwxlwc
Rank: 1
来 自:甘肃兰州
等 级:新手上路
帖 子:1
专家分:0
注 册:2009-8-24
收藏
得分:0 
主要问题在这里
首先 通过运行 你那个分号 的输入是中文状态输入的。。还有 就是  类的成员函数 定义在main函数之前了。。请自行更改后 再试要再不对  就怪了

那家伙真牛!
2009-08-25 11:50
快速回复:请前辈比较两个程序,一个有问题一个没问题,为什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039695 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved