您的位置:首页 > 其它

一个案例带你弄懂类的继承方式对子类对外访问属性影响以及static遇到继承

2015-01-02 10:46 246 查看
C++中的继承方式(public,private,protected)会影响子类的对外访问属性

1.判断某一句话,能否被访问

2.看子类如何从父类继承(public,private,protected)

3.看父类中的访问级别(public,private,protected)

以下是综合练习

#include <cstdlib>
#include <iostream>

using namespace std;

class A
{
private://私有
int a;
protected://保护
int b;
public: //继承
int c;

A()
{
a = 0;		b = 0;		c = 0;
}

void set(int a, int b, int c)
{
this->a = a;		this->b = b;		this->c = c;
}
};

class B : public A//公有继承
{
public:
void print()
{
//cout << "a = " << a;//写在子类的内部,a在父类是私有,在子类无法访问
cout << "b = " << b;//OK
cout << "c = " << endl;//OK
}
};

class C : protected A//保护继承
{
public:
void print()
{  //写在子类内部
//	cout << "a = " << a;父类私有无法访问
cout << "b = " << b;//ok
cout << "c = " << endl;//ok(保护的子类的内部可以使用)
}
};

class D : private A//私有继承
{
public:
void print()
{
//cout << "a = " << a;
cout << "b = " << b << endl;//OK(b在父类是保护,在子类是私有)
cout << "c = " << c << endl;//OK(在父类是公有,在子类为私有)
}
};

int main()
{

A aa;
B bb;
C cc;
D dd;

aa.c = 100;//ok
bb.c = 100;//(子类的外部,父类为public)//ok
//cc.c = 100;//error(在子类外部,在子类为protected,无法访问了)
//dd.c = 100;//error无法访问,(在子类外部,在子类为private)

aa.set(1, 2, 3);//父类public
bb.set(10, 20, 30);//父类public,子类public继承
//cc.set(40, 50, 60);//保护继承,无法在外部访问
//dd.set(70, 80, 90);//私有继承,在外部无法访问

bb.print();//下面几个都可以,子类定义的访问为public
cc.print();//OK
dd.print();//OK

system("pause");
return 0;
}


static:

基类定义的静态成员,将被所有派生类共享

根据静态成员自身的访问特性和派生类的继承方式,在类层次

体系中具有不同的性质

派生类中访问静态成员,以下形式显式说明:

类名::成员

或通过对象访问

对象名.成员

#include<iostream>
#include<stdlib.h>
class  A
{
public:

A()
{
std::cout << a << std::endl;
}
public:
/*A()
{
a = 0;
}*/
static int a;
int b;
void printfB()
{
std::cout << "我是父类的B=" << b << std::endl;
}
void print()
{
std::cout << "我是父类" << std::endl;
}

protected:
private:
};
//这句话的意思是给static初始化,
//告诉c++编译器为整个类4个字节分配内存空间
int A::a = 0;//不光是给static初始化,告诉c++编译器分配内存
class B :private A
{
public:
int b;
int c;
void print()
{
std::cout << "我是子类" << std::endl;
//std::cout << a << std::endl;//a不可以用

}
};

void main()
{

A a1;
B bl;
bl.print();
system("pause");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐