c++类继承 和 using引用基类成员

一、类继承

基类:定义私有、保护、公有三类的成员变量和成员函数。

class base {
private:
	int a;
	void test1() {}
protected:
	int b;
	void test2() {}
public:
	int c;
	void test3() {}
};

1.公有继承

除了父类的private成员不可见(不可见:继承了但是无法直接访问)外;父类的保护成员 继承为 子类的保护成员,父类的公有成员 继承为 子类的公有成员,可以直接访问。


class public_derived :public base {
	void f1() {
		//test1(); a = 1; 基类私有成员无法直接访问

		test2(); b = 2; //成为子类的保护成员

		test3(); c = 3; //成为子类的公有成员
	}
};

 因为基类私有成员对派生类不可见,故可在派生类重写(覆盖)它们。

class base {
private:
	int a = 1;
	void test1() { cout << "base test1()" << endl; }
};

class public_derived :public base {
public:
	//重写(覆盖)父类私有成员
	int a = 10;
	void test1() { cout << "public_derived test1()" << endl; }
};

//测试
int main() {
	public_derived pub;
	cout << pub.a << endl;
	pub.test1();
}

运行结果:

10
public_derived test1()

 强调一点,继承是继承基类的全部成员,包括私有成员。

如下可看到,继承,就是派生类继承了基类的全部成员,且可在此基础上扩充(指f1函数)。

 

2.保护继承

除了父类的private成员不可见,其他都继承为保护成员,对外界不可见


class protected_derived :protected base {
	void f1() {
		cout << "private f()" << endl;
		//test1(); a = 1; 基类私有成员无法直接访问

		test2(); b = 2; //成为子类的保护成员

		test3(); c = 3; //成为子类的保护成员
	}
};

 

3.私有继承

默认行为,除了父类的private成员不可见,其他都继承为私有成员

class private_derived :private base {

	void f1() {
		cout << "private f()" << endl;
		//test1(); a = 1; 基类私有成员无法直接访问

		test2(); b = 2; //成为子类的私有成员

		test3(); c = 3; //成为子类的私有成员
	}
};

二、using 引用基类成员

用法:using 基类名::基类成员名;

含义:将基类的某保护或公有成员声明为本派生类此part(private/protected/public)的成员,不管

什么继承方式。派生类的using不能作用于基类的私有成员,因为不可见~ 

当using声明所在part为private:


class derived :private或protected或public base {
private:
	//将父类的保护和公有成员都声明为子类的私有成员,不管什么继承方式
	using base::b;
	using base::test2;
	using base::c;
	using base::test3;
};

 

当using声明所在part为protected:


class derived :private或protected或public base {
protected:
	//将父类的保护和公有成员都声明为子类的保护成员,不管什么继承方式
	using base::b;
	using base::test2;
	using base::c;
	using base::test3;
};

 

当using声明所在part为public:


class derived :private或protected或public base {
public:
	//将父类的保护和公有成员都声明为子类的公有成员,不管什么继承方式
	using base::b;
	using base::test2;
	using base::c;
	using base::test3;
};

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值