c++特性之一-----继承

简介:
  1. 子类继承父类,父类里的成员可以被子类调用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream.h>
class  Animal
{
public :
     void  eat()
     {
         cout<< "animal eat" <<endl;
     }
 
     void  sleep()
     {
         cout<< "animal sleep" <<endl;
     }
};
 
class  Fish: public  Animal
{
   
};
 
void  main()
{
     Animal an;
     Fish fh;
     fh.sleep();
}

2.protected 成员被毕继承只能对在子类内部访问,不能直接访问,父类本身也不能访问。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <iostream.h>
class  Animal
{
public :
     void  eat()
     {
         cout<< "animal eat" <<endl;
     }
protected :
     void  sleep()
     {
         cout<< "animal sleep" <<endl;
     }
public :
     void  breathe()
     {
         cout<< "animal breathe" <<endl;
     }
};
 
class  Fish: public  Animal
{
public :
 
     void  test()
     {
         sleep();
     }
   
};
 
void  main()
{
     Animal an;
     Fish fh;
     fh.test(); //子类可以通过内部成员函数来访问父类的保护成员
     fh.sleep(); //子类不能直接访问父类的保护成员。
}
3. 继承中私有成员无论怎样都不能被子类访问!
4.构造函数。构造子类对象时,先执行父类的构造函数,再执行子类的构造函数。析构的顺序正好与其相反 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream.h>
class  Animal
{
public :
     Animal(){cout<< "Animal construction!" <<endl;}
     void  eat()
     {
         cout<< "animal eat" <<endl;
     }
protected :
     void  sleep()
     {
         cout<< "animal sleep" <<endl;
     }
public :
     void  breathe()
     {
         cout<< "animal breathe" <<endl;
     }
};
 
class  Fish: public  Animal
{
public :
     Fish(){cout<< "Fish construction!" <<endl;}
 
     void  test()
     {
         sleep();
     }
   
};
 
void  main()
{
//  Animal an;
     Fish fh;
     fh.test(); //子类可以通过内部成员函数来访问父类的保护成员
//  fh.sleep();//子类不能直接访问父类的保护成员。
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
5.子类构造要先构造父类。当父类是有参构造函数,子类构造函数无参时,需要在后面加上 :父类的构造函数
< div  class = "cnblogs_Highlighter" ><pre class = "brush:cpp" >#include <iostream.h>
class  Animal
{
public :
     Animal( int  height, int  weigtht) //带参数的构造函数
     {cout<< "Animal construction!" <<endl;}
     void  eat()
     {
         cout<< "animal eat" <<endl;
     }
protected :
     void  sleep()
     {
         cout<< "animal sleep" <<endl;
     }
public :
     void  breathe()
     {
         cout<< "animal breathe" <<endl;
     }
};
 
class  Fish: public  Animal
{
public :
     Fish():Animal(300,400)
     {cout<< "Fish construction!" <<endl;}
 
     void  test()
     {
         sleep();
     }
   
};
 
void  main()
{
//  Animal an;
     Fish fh;
     fh.test(); //子类可以通过内部成员函数来访问父类的保护成员
//  fh.sleep();//子类不能直接访问父类的保护成员。
}
 
 
</pre>
</ div >
 
相关文章
|
3月前
|
存储 安全 Java
c++--继承
c++作为面向对象的语言三大特点其中之一就是继承,那么继承到底有何奥妙呢?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用,继承就是类方法的复用。
81 0
|
5月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
161 12
|
6月前
|
安全 C++
【c++】继承(继承的定义格式、赋值兼容转换、多继承、派生类默认成员函数规则、继承与友元、继承与静态成员)
本文深入探讨了C++中的继承机制,作为面向对象编程(OOP)的核心特性之一。继承通过允许派生类扩展基类的属性和方法,极大促进了代码复用,增强了代码的可维护性和可扩展性。文章详细介绍了继承的基本概念、定义格式、继承方式(public、protected、private)、赋值兼容转换、作用域问题、默认成员函数规则、继承与友元、静态成员、多继承及菱形继承问题,并对比了继承与组合的优缺点。最后总结指出,虽然继承提高了代码灵活性和复用率,但也带来了耦合度高的问题,建议在“has-a”和“is-a”关系同时存在时优先使用组合。
322 6
|
8月前
|
C++ 开发者
C++学习之继承
通过继承,C++可以实现代码重用、扩展类的功能并支持多态性。理解继承的类型、重写与重载、多重继承及其相关问题,对于掌握C++面向对象编程至关重要。希望本文能为您的C++学习和开发提供实用的指导。
129 16
|
8月前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
174 5
|
11月前
|
编译器 程序员 定位技术
C++ 20新特性之Concepts
在C++ 20之前,我们在编写泛型代码时,模板参数的约束往往通过复杂的SFINAE(Substitution Failure Is Not An Error)策略或繁琐的Traits类来实现。这不仅难以阅读,也非常容易出错,导致很多程序员在提及泛型编程时,总是心有余悸、脊背发凉。 在没有引入Concepts之前,我们只能依靠经验和技巧来解读编译器给出的错误信息,很容易陷入“类型迷路”。这就好比在没有GPS导航的年代,我们依靠复杂的地图和模糊的方向指示去一个陌生的地点,很容易迷路。而Concepts的引入,就像是给C++的模板系统安装了一个GPS导航仪
298 59
|
10月前
|
编译器 C++ 开发者
【C++】继承
C++中的继承是面向对象编程的核心特性之一,允许派生类继承基类的属性和方法,实现代码复用和类的层次结构。继承有三种类型:公有、私有和受保护继承,每种类型决定了派生类如何访问基类成员。此外,继承还涉及构造函数、析构函数、拷贝构造函数和赋值运算符的调用规则,以及解决多继承带来的二义性和数据冗余问题的虚拟继承。在设计类时,应谨慎选择继承和组合,以降低耦合度并提高代码的可维护性。
139 1
【C++】继承
|
10月前
|
安全 编译器 C++
【C++11】新特性
`C++11`是2011年发布的`C++`重要版本,引入了约140个新特性和600个缺陷修复。其中,列表初始化(List Initialization)提供了一种更统一、更灵活和更安全的初始化方式,支持内置类型和满足特定条件的自定义类型。此外,`C++11`还引入了`auto`关键字用于自动类型推导,简化了复杂类型的声明,提高了代码的可读性和可维护性。`decltype`则用于根据表达式推导类型,增强了编译时类型检查的能力,特别适用于模板和泛型编程。
104 2
|
11月前
|
C++
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
C++番外篇——对于继承中子类与父类对象同时定义其析构顺序的探究
119 1
|
11月前
|
C++
C++番外篇——虚拟继承解决数据冗余和二义性的原理
C++番外篇——虚拟继承解决数据冗余和二义性的原理
119 1