33,311
社区成员
发帖
与我相关
我的任务
分享
#include <iostream>
using namespace std;
class fish{
public:
friend void breath(fish&);
friend void love(fish X);
fish():num(0),moon(1){};
private:
int num;
int moon;
};
void breath(fish &t)
{
cout <<t.num<<endl;
}
void love(fish x)
{
cout<<x.moon<<endl;
}
void main()
{
fish st1;
love(st1);
breath(st1);
}
class Test{
public:
void Test()
{ int num=0; }
void Message()
{
cout<<num<<endl;
}
prvate:
int num;
};
void main()
{
Test t;
t.Meassage();
}
比如这段 不科学,错得离谱的 代码来看, 我想输出 private 里面的成员变量我该如何去实现呢?
当然,不用 friend 实现。
我就是搞不懂 为什么 我把 成员变量给了 成员函数,然后由外部去调用成员函数会出现各种错误。。
[/quote]
private成员就是为了不让类的用户获得类的实现细节。。只能通过类的接口,也就是public成员访问类对象。。你要明白。。你写的类是可能会被其他人使用的。。
而且,由于用户只能通过接口访问类对象,当你需要对类的定义进行修改的时候,只要不改动接口,用户代码就不需要修改。。这可以减少工作量。。
另外,你那段代码。。我帮你改了一下。。
#include <iostream>
using namespace std;
class Test{
public:
Test(){num=0;}
void Message(){cout<<num<<endl;}//在类成员函数中输出num。。
int getnum() const{ return num;}//返回num给类的用户
private:
int num;
};
void main()
{
Test t;
t.Message();
cout<<t.getnum()<<endl;
}
[/quote]
懂了,庸才一枚,问的问题有点奇葩。。。 只看书不实践的下场,书看多了就杂了。。所以 各种问题又,,我得努力去实践,一段时间放下书本。。
O(∩_∩)O~
谢谢你们哈!
void Test() //首先构造函数不应该加上发挥类型void
{
int num=0; //错误,你没有个类的num变量赋值,而是给了另一个局部临时变量赋值.
//因为你在这是声明了一个临时的num.
}
[code=c]
你应该这样:
Test()
{
num=0;
}
[/code]
或者Test():num(0){}
都行啊.
[/quote]
哦哦,好的。谢谢,懂了。。秒懂,,记性不好。。
void Test() //首先构造函数不应该加上发挥类型void
{
int num=0; //错误,你没有个类的num变量赋值,而是给了另一个局部临时变量赋值.
//因为你在这是声明了一个临时的num.
}
[code=c]
你应该这样:
Test()
{
num=0;
}
[/code]
或者Test():num(0){}
都行啊.
class Test{
public:
void Test()
{ int num=0; }
void Message()
{
cout<<num<<endl;
}
prvate:
int num;
};
void main()
{
Test t;
t.Meassage();
}
比如这段 不科学,错得离谱的 代码来看, 我想输出 private 里面的成员变量我该如何去实现呢?
当然,不用 friend 实现。
我就是搞不懂 为什么 我把 成员变量给了 成员函数,然后由外部去调用成员函数会出现各种错误。。
[/quote]
private成员就是为了不让类的用户获得类的实现细节。。只能通过类的接口,也就是public成员访问类对象。。你要明白。。你写的类是可能会被其他人使用的。。
而且,由于用户只能通过接口访问类对象,当你需要对类的定义进行修改的时候,只要不改动接口,用户代码就不需要修改。。这可以减少工作量。。
另外,你那段代码。。我帮你改了一下。。
#include <iostream>
using namespace std;
class Test{
public:
Test(){num=0;}
void Message(){cout<<num<<endl;}//在类成员函数中输出num。。
int getnum() const{ return num;}//返回num给类的用户
private:
int num;
};
void main()
{
Test t;
t.Message();
cout<<t.getnum()<<endl;
}
class Test{
public:
void Test()
{ int num=0; }
void Message()
{
cout<<num<<endl;
}
prvate:
int num;
};
void main()
{
Test t;
t.Meassage();
}
很粗心看到没有红色部分你并没有给private里面的num赋值而是给一个临时局部变量赋值(你不应该添加int),这样message函数就输出了一个没有初始化的变量.程序崩溃了.
其次"我们定位 prvate变量的作用意义何在"这个我想你去找本C++的书就行了.