学到这里,首先要恭喜你,你的C++之旅快要接近尾声了。是个值得庆贺的事情。不过还是不能太松懈,因为重头戏模板和STL你还没了解了。别急,先学下本章吧。言归正传,我们先来了解下包含.
包含
什么是包含?顾名思义,就是一个对象包含另一个对象C++的语法我们已了解了不好了,相信自己也尝试了离开书籍的帮助编写了一些小程序,我们有这些基础相信学习本章不会有很大难度
。首先请看下面这个简单的包含Demo
using namespace std;
//包含的简单Demo
class A//被包含的类A
{
public:
A();
A(int);
void get();
private:
int x;
};
A::A(int y){x=y;}
void A::get(){cout<<x<<endl;}
class B
{
public:
B(int y):a(y){;}
void get(){a.get();}
private:
A a;//包含类A对象a
};
int main()
{
B b(50);
b.get();
system("pause");
return 0;
}
demo代码中类B对象包含一个私有对象类a,这里的类A被类B包含.在类B里只能访问L类A提供的共有函数接口.我们是不是觉得和私有继承类似呢?由于代码较简单,我们在这里不在一一讲解..
在本章节最后会讲解包含和私有继承的区别,以及什么时候选择包含,什么时候选择私有继承.
友元类
什么是友元类?我们举个生活中的例子.比如小朋友的遥控汽车,如果这里我们把汽车看成一个类的话,那么遥控器就是汽车的友元类,因为它可以控制汽车,而汽车不可以控制遥控器.汽车和遥
控器本身并不关联.但是将遥控器变成汽车的友元类,那么要控制就可以控制汽车了。。
友元类怎么声明呢?比如汽车类Car,我们只需要在汽车的Car里面添加friend说明,那么遥控器车就可以控制汽车呢.请看Demo演示
using namespace std;
//友元类Demo演示
class Car
{
public:
friend class Tele;//请注意这行(关键)
Car(int i);
void set(int i);//添加该方法主要是演示在友元类中可以访问(设置汽车开关)
void get();//添加该方法主要是演示在友元类中可以访问(获取汽车开关状态)
private:
int on_off;
};
Car::Car(int i):on_off(i){}
void Car::set(int i){on_off=i;}
void Car::get()
{
if(on_off==0)
{
cout<<"汽车是开关处于关闭状态"<<endl;
}
else
{
cout<<"汽车是开关处于打开状态"<<endl;
}
}
class Tele
{
public:
void set(Car &c,int i)
{
c.set(i);
//c.on_off=1;
}
void get(Car &c)
{
c.get();
}
};
int main()
{
Car c(0);
Tele t;
t.set(c,1);
t.get(c);
system("pause");
return 0;
}
聪明的读者获取尝试着注释friend class Tele;//请注意这行(关键)这句话,发现程序依然可以访问.那么获取会问,既然能访问,为什么要增加友元了?好像没必要.其实错了.我们这里注释
friend能访问的原因是因为在Tele类里访问的都是Car类的共有函数,如果我们尝试着注释那句话然后在Tele的set函数里添加c.on_off=1;这句话在运行就会提示错误呢?为什么呢?因为on_off
是私有.外部不可以访问,而添加friend程序就可以运行了。友元类可以访问类的共有,私有.就相当于是在类内部访问一样…还有说明的是friend可以放在public,protected,private任何一个
模块内,没有限制。
嵌套类
顾名思义,一个类中嵌套另外一个类.我们看下Demo代码
using namespace std;
//嵌套 Demo
class A
{
public:
class B//被嵌套的类B
{
public:
B(int i):x(i){}
void get(){cout<<x<<endl;}
private:
int x;
};
A(int i):b(i){}
void get(){b.get();}
private:
B b;
};
int main()
{
A a(30);
a.get();
system("pause");
return 0;
}
我们在类A内部定义了一个类B.私有变量定义了这个类B变量b.在类A构造函数中给类B进行了初始化.用类A的get()方法成功的访问了内部类型类B的方法..
以上就是本章节的全部内容.代码很简单.目的也很简单。就是希望大家能通过观看简单的代码了解C++..