某天的日志1

来源:互联网 发布:什么值得买网站源码 编辑:程序博客网 时间:2024/05/17 05:00

无论哪种继承方式,基类的公有和保护成员都可以被派生类的成员访问。

无论哪种继承方式,基类的私有成员都不可以被派生类的成员和对象访问。

只有公有继承时,基类的公有成员才可以被派生类的对象访问。

两个类互为友元

在看到一个类的完整定义之前,清不要调用其方法!

因为在编译器尚未看到Window类的定式前不知道类Window有win这个成员,所以光先声明类Window后只能使用其引用或指针, 不能访问其成员或对它实例化。

在声明之后,定义之前,类为不完整类型,只能用于指向该类型的指针或引用或者用于声明(不是定义)使用该类型做为形参类型或者返回类型的函数。


那怎么解决这个问题呢?
将函数func的实现放在这两个类声明的最下面
官方做法是:将类的声明放在一个头件.h中,类的实现放在另一个文件.cpp中。都怪我想偷懒,不按规矩出牌,这次好了,浪费了一个下午,买了个教训!

修改后:
#include <iostream>
using namespace std;


class window;

class screen
{
public:
friend class window;
screen(int s)
:value(s)
{
}
int  func(window &w);
private:
int value;
};

class window
{
public:
friend class screen;
int func(screen& s);

window(int g)
:win(g)
{
}
private:
int win;
};

int window::func(screen& s)
{
cout << s.value << endl;
return 1;
}

int screen::func(window &w)
{
cout << w.win << endl;
return 1;
}
int main()
{
screen s(1);
window w(2);

cout << w.func(s)<< endl;
cout << s.func(w) << endl;

return 0;
}

原创粉丝点击