三种访问权限
(1)public :类的外部可以自由访问
(2)protected:类自身和子类可以访问
(3)private:类自身可以访问
想要看到权限的效果,看下面的对比程序,下面只是举例说明。
#include <stdio.h>
struct Student
{
const char* name;
int number;
void info()
{
printf("Name = %s, Number = %d\n", name, number);
}
}
int main()
{
Student s;
s.name = "mofei";
s.number = 100;
s.info();
return 0;
}
上面的是结构体直接封装三个成员,直接调用name和nuber,下面使用权限控制来限制访问name和number,来看看区别在哪里。
#include <stdio.h>
struct Student
{
protected:
const char* name;
int number;
public:
void set(const char* n, int i)//类本身调用了上边定义的变量
{
name = n;
number = i;
}
void info()
{
printf("Name = %s, Number = %d\n", name, number);
}
};
int main()
{
Student s;
s.set("mofei", 100);
s.info();
return 0;
}
可以从程序直接看出,都可以输出同样的结果,但是,比起直接使用结构体s.name 和s.number去赋值的好处是什么呢?
假如有一天,我们要把name改成st_name,那么只需要改函数体内的name变量名改成st_name,再调用set函数即可,不必像使用结构体那样去修改主程序中s.name位s.st_name了,这就是限制权限和封装的好处了。
注意一下:
在C语言中struct有了自已的含义,虽然在C++中扩展成为了类,但一般情况还是遵循C中的用法,C++一般情况下用class来做类的关键字声明,而继承是C++中代码复用的方式,通过继承,在子类中可以使用父类中的代码,子类可以完全继承父类中所有的变量和函数,在可以使用父类的地方就可以用子类代替,子类从概念上而言是一种特殊的父类。
继承的使用
把上面的Student当成是父类,Master是其一个子类,研究生继承了学生父类中的代码。
代码示例说明
#include <stdio.h>
struct Student
{
protected:
const char* name;
int number;
public:
void set(const char* n, int i)
{
name = n;
number = i;
}
void info()
{
printf("Name = %s, Number = %d\n", name, number);
}
};
class Master : public Student
{
protected:
const char* domain;
public:
void setDomain(const char* d)
{
domain = d;
}
const char* getDomain()
{
return domain;
}
};
int main()
{
Master s;//声明一个Master类的对象
s.set("mofei", 100);
s.setDomain("nice");//设置变量的值
s.info();
printf("Domain = %s\n", s.getDomain());//打印获取到的变量的值
return 0;
}