您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
第18讲-访问控制
发布时间:2021-05-16 18:53:37编辑:雪饮阅读()
父类中被public修饰的属性是可以被子类实例直接修改的,一个实例如:
#include <iostream>
#include <string>
//基类
class BaseClass
{
public:
BaseClass();
~BaseClass();
void doSomething();
std::string name;
};
BaseClass::BaseClass(){
name="蝙蝠侠";
std::cout<<"进入基类构造器。。。。\n";
std::cout<<"我是"<<name<<"我在基类构造器里面干了某些事。。。\n\n";
};
BaseClass::~BaseClass(){
std::cout<<"进入基类析构器....\n";
std::cout<<"我是"<<name<<"我在基类析构器里面也干了某些事情....\n\n";
}
void BaseClass::doSomething(){
std::cout<<"我是"<<name<<"我干了某些事情...\n\n";
}
//子类
class SubClass:public BaseClass{
public:
SubClass();
~SubClass();
};
SubClass::SubClass(){
std::cout<<"进入子类构造器....\n";
std::cout<<"我是"<<name<<"我在子类构造器里面还干了某些事情....\n\n";
}
SubClass::~SubClass(){
std::cout<<"进入子类析构器.....\n";
}
int main(){
SubClass subClass;
subClass.name="蜘蛛侠";
subClass.doSomething();
std::cout<<"完事,收工!\n";
return 0;
}
编译并运行如:
进入基类构造器。。。。
我是蝙蝠侠我在基类构造器里面干了某些事。。。
进入子类构造器....
我是蝙蝠侠我在子类构造器里面还干了某些事情....
我是蜘蛛侠我干了某些事情...
完事,收工!
进入子类析构器.....
进入基类析构器....
我是蜘蛛侠我在基类析构器里面也干了某些事情....
Process returned 0 (0x0) execution time : 0.066 s
Press any key to continue.
可以看到在父类中name属性由于是public修饰的,而在其构造函数中已经将其值赋值以“蝙蝠侠”但是在子类实例化之后又通过子类的实例修改了该name的值为“蜘蛛侠”。
那么protected修饰的属性在父类中,则子类实例是无权修改的。
一个实例如:
#include <iostream>
#include <string>
//基类
class BaseClass
{
public:
BaseClass();
~BaseClass();
void doSomething();
protected:
std::string name;
};
BaseClass::BaseClass(){
name="蜘蛛侠";
std::cout<<"进入基类构造器。。。。\n";
std::cout<<"我是"<<name<<"我在基类构造器里面干了某些事。。。\n\n";
};
BaseClass::~BaseClass(){
std::cout<<"进入基类析构器....\n";
std::cout<<"我是"<<name<<"我在基类析构器里面也干了某些事情....\n\n";
}
void BaseClass::doSomething(){
std::cout<<"我是"<<name<<"我干了某些事情...\n\n";
}
//子类
class SubClass:public BaseClass{
public:
SubClass();
~SubClass();
};
SubClass::SubClass(){
std::cout<<"进入子类构造器....\n";
std::cout<<"我是"<<name<<"我在子类构造器里面还干了某些事情....\n\n";
}
SubClass::~SubClass(){
std::cout<<"进入子类析构器.....\n";
}
int main(){
SubClass subClass;
subClass.name="蜘蛛侠";
subClass.doSomething();
std::cout<<"完事,收工!\n";
return 0;
}
则此时即便编译都是无法通过的
![访问控制.png](/d/file/xuewuzhijing/xindebiji/74e3c24b29240a24afc6f0766f48a07a.png)
以上的public、protected都是类的访问修饰符。
那么关于类的访问修饰符,完整的介绍可以看看下面。
C++ 类访问修饰符
数据封装是面向对象编程的一个重要特点,它防止函数直接访问类类型的内部成员。类成员的访问限制是通过在类主体内部对各个区域标记 public、private、protected 来指定的。关键字 public、private、protected 称为访问修饰符。
一个类可以有多个 public、protected 或 private 标记区域。每个标记区域在下一个标记区域开始之前或者在遇到类主体结束右括号之前都是有效的。成员和类的默认访问修饰符是 private。
公有(public)成员
公有成员在程序中类的外部是可访问的。您可以不使用任何成员函数来设置和获取公有变量的值
什么是友元
在一个类A中,将类B声明为友元类,则类B可以访问类A的私有成员和保护成员。另外,也可以将函数声明为友元函数。
私有(private)成员
私有成员变量或函数在类的外部是不可访问的,甚至是不可查看的。只有类和友元函数可以访问私有成员。
默认情况下,类的所有成员都是私有的。
protected(受保护)成员
protected(受保护)成员变量或函数与私有成员十分相似,但有一点不同,protected(受保护)成员在派生类(即子类)中是可访问的。
关键字词:访问控制,类
下一篇:第19讲-覆盖方法和重载方法