c类的访问权限
‘壹’ c++的类中的权限到底是怎么回事
一个类里面可能用到10个变量,其中5个变量是自产自销的,不与外界变量、函数发生关系,就可以设定为private属性,这样外部函数无法访问该变量,杜绝了擅自修改造成程序错误的可能性。其它必要对外的数据再设置为public属性,供外部变量使用。细节自己看书吧。
主题思想就是对变量的访问范围进行限定,有效避免数据被以外修改的可能性。而在C语言里面,这种机制是没有的,所以C的变量被无端修改时,比较傲难debug.
‘贰’ 在C++中,结构里的数据成员和成员函数的默认访问权限是类中的数据成员和成员函数的默认访问权限是
结构体中默认public,类中默认private
‘叁’ C 中什么是类
类是 面向对象程序设计语言中的一个概念。
程序设计中类的含义
[一个简单的类图]
一个简单的类图
类(Class)实际上是对某种类型的对象定义变量和方法的原型。它表示对现实生活中一类具有共同特征的事物的抽象,是面向对象编程的基础。
类是对某个对象的定义。它包含有关对象动作方式的信息,包括它的名称、方法、属性和事件。实际上它本身并不是对象,因为它不存在于内存中。当引用类的代码运行时,类的一个新的实例,即对象,就在内存中创建了。虽然只有一个类,但能从这个类在内存中创建多个相同类型的对象。
可以把类看作“理论上”的对象,也就是说,它为对象提供蓝图,但在内存中并不存在。从这个蓝图可以创建任何数量的对象。从类创建的所有对象都有相同的成员:属性、方法和事件。但是,每个对象都象一个独立的实体一样动作。例如,一个对象的属性可以设置成与同类型的其他对象不同的值。
类定义的一般形式
class Name {
public:
类的公有接口
[MFC类图]
MFC类图
private:
私有的成员函数
私有的数据成员定义
};
类的定义由 类头 和 类体 两部分组成。类头由关键字 Class 开头,然后是类名,其命名规则与一般标识符的命名规则一致。类体包括所有的细节,并放在一对花括号中。类的定义也是一个语句,所以要有分号结尾,否则会产生编译错误。
类体定义类的成员,它支持两种类型的成员:
(1)数据成员,它们指定了该类对象的内部表示。
(2)成员函数,他们指定了该类的操作。
类成员有3种不同的访问权限:
(1)公有( public )成员可以在类外访问。
(2)私有( private )成员只能被该类的成员函数访问。
(3)保护( protected )成员只能被该类的成员函数或派生类的成员函数访问。
数据成员通常是私有的,成员函数通常有一部分是公有的,一部分是私有的。公有的函数可以在类外被访问,也称之为类的接口。可以为各个数据成员和成员函数指定合适的访问权限。
Microsoft Visual Basic for Applications (VBA) 工程中可包含两种不同类型的类模块:没有任何一种与其关联的用户界面的基本类模块;与窗体或其它组件关联的类模块。例如,与窗体相关联的类模块,它们和基本类模块相同,只是它们只有在那个窗体存在于内存中时,才存在于内存中。拥有相关联的类模块的对象的示例是“用户窗体”、Microsoft Access 窗体和报表、Microsoft Word 的 ThisDocument 对象,Microsoft Excel 的 ThisWorkbook 和 SheetN 对象。
‘肆’ C++:访问权限protected的问题
#include <iostream>
using namespace std;
class Shape{
protected:
virtual double getArea() =0;
virtual double getCircumference()=0;
virtual void print(){
cout<<"Circumference = "<<getArea()<<"\n";
cout<<"Area = " <<getCircumference()<<"\n\n";
}
};
class Circle:public Shape {
public:
Circle(double radius = 0){
this->radius = radius;
}
double getArea(){
return Pi* radius* radius;
}
double getCircumference(){
return 2*Pi* radius;
}
private:
//const static double Pi =3.14;const static类型的变量,只有int能这么写,其他类型必须在类外初始化
double radius ;
};
const double Circle :: Pi = 3.14;
class Triangle:public Shape{
public:
Triangle(double width ,double height){
this->width = width;
this->height=height;
}
double getArea(){
return width * height;
}
double getCircumference(){
return 2*width + 2*height;
}
private:
double width , height;
};
int main(int argc, char *argv[])
{
cout << "Let's create a Circle .\nEnter a radius: ";
double Radius = 0;
cin >> Radius;
Circle MyCircle(Radius);
MyCircle.print();
cout << "Let's create a Triangle .\nEnter the width and height : ";
double width ,height;
cin >> width >>height;
Triangle MyTriangle(width ,height);
MyTriangle.print();
return 0;
}
在说说protect继承的问题,在主函数定义的Circle对象,cirle是从shape共有继承下来的,所有对于circle来说,print函数是保护类型的,当然他的对象是访问不了自己的保护成员的。
protected允许其子类来访问,这句话的意思是在类定义内,子类可以访问访问父类的protect
例如:
#include <iostream>
using namespace std;
class Shape{
protected:
virtual double getArea() =0;
virtual double getCircumference()=0;
virtual void print(){
cout<<"Circumference = "<<getArea()<<"\n";
cout<<"Area = " <<getCircumference()<<"\n\n";
}
};
class Circle:public Shape {
public:
Circle(double radius = 0) : radius(radius)
{
}
double getArea(){
return Pi* radius* radius;
}
double getCircumference(){
return 2*Pi* radius;
}
void print()
{
Shape::print();
}
private:
const static double Pi ;
double radius ;
};
const double Circle :: Pi = 3.14;
class Triangle:public Shape{
public:
Triangle(double width ,double height){
this->width = width;
this->height=height;
}
double getArea(){
return width * height;
}
double getCircumference(){
return 2*width + 2*height;
}
void print()
{
Shape::print();
}
private:
double width , height;
};
int main(int argc, char *argv[])
{
cout << "Let's create a Circle .\nEnter a radius: ";
double Radius = 0;
cin >> Radius;
Circle MyCircle(Radius);
MyCircle.print();
cout << "Let's create a Triangle .\nEnter the width and height : ";
double width ,height;
cin >> width >>height;
Triangle MyTriangle(width ,height);
MyTriangle.print();
return 0;
}
‘伍’ 关于虚基类的成员在最派生类中的访问权限的疑问
虚基类和非虚基类的继承本来就没有太大区别:
仅在如你图所给的关系中,非虚基类会有多个副本而产生歧异,而虚基类继承过来只有一个副本。
有公有权限的就以公有权限为先!然后保护权限!
私有不能继承
cout<<d.B::funA()<<endl; //没有d.B::funA()这种调用方式 这是错的
再者,很少有私有继承和保护继承!
图示的继承的方式,也很少见,多以组合等取代之
‘陆’ c++类中定义的成员默认的访问属性是什么
在c++中,类(class)的所有成员的默认访问权限是私有(private),而结构(struct)的所有成员的默认访问权限是公共(public)。
‘柒’ 在C++类中,成员的访问权限有哪几种用什么关键字指定
关键字public,private,protected被称为 访问权限修饰符 或 访问控制修饰符 分别表示 公有,私有,保护 属性。(访问属性 又称 访问权限)
private是类的默认访问属性
‘捌’ C语言 读取访问权限冲突 怎么解决
运行三次后, 最后一次 找abcd没找到, 返回的q是NULL
导致p=q + strlen("abcd");
指向出错。
这个可以找不到后退出。
while(*p!='