[C++]继承

#include <iostream>
using namespace std;
//继承概念
//面向对象程序设计有4个主要特点:抽象、封装、继承和多态性

//1、子类拥有父类的所有成员变量和成员函数 
//2、子类可以拥有父类没有的方法和属性
//
//3、子类就是一种特殊的父类
//4、子类对象可以当作父类对象使用
//派生类继承了基类的全部成员变量和成员方法(除了构造和析构之外的成员方法)
//但是这些成员的访问属性,在派生过程中是可以调整的

//1)C++中的继承方式会影响子类的对外访问属性 
//public继承:父类成员在子类中保持原有访问级别
//private继承:父类成员在子类中变为private成员
//protected继承:父类中public成员会变成protected
//  父类中protected成员仍然为protected
//  父类中private成员仍然为private
//2)private成员在子类中依然存在,但是却无法访问到。不论种方式继承基类,
//派生类都不能直接使用基类的私有成员 

//
//public继承不会改变父类对外访问属性
//private继承会改变父类对外访问属性为private
//protected继承会部分改变父类对外访问属性
class Parent{
private:
int b;

protected:
int c;

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

class Child1:public Parent
{
public :
void print(){
cout << "a: " << a << " b: err" << " c: " << c << endl;
}
};

class Child2 : protected Parent
{
public:
void print(){
cout << "a: " << a << " b: err" << " c: " << c << endl;
}
};

class Child3 : private Parent
{
public:
void print(){
cout << "a: " << a << " b: err"<< " c: " << c << endl;
}
};

int main()
{
Child1 c1;
Child2 c2;
Child3 c3;

c1.a = 1;
//c1.b = 1; err
//c1.c = 1; err
//c2.a = 1; err
//c2.b = 1; err
//c2.c = 1; err

//c3.a = 1; err
//c3.b = 1; err
//c3.c = 1; err

c1.set(1,2,3);
c1.print();

//c2.set(4,5,6); err
c2.print();

//c3.set(7,8,9); err
c3.print();
getchar();
return 0;
}


C++中子类对外访问属性表

 

父类成员访问级别

 

public

proteced

private

public

public

proteced

private

proteced

proteced

proteced

private

private

private

private

Private

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值