c++子类与父类的关系

重载:1.参数个数、类型不同。

      2.返回类型不同。

继承:class fish:public animal

            子:   父

      注:构造时先构造父函数,再是子函数。

          析构时先析构子函数,再是父函数。

在子类中调用父类带参数的构造函数:

当父类定义了带参数的构造函数时如animal(int height,int weight),子类构造时,要调用它,所以子类的构造函数fish():animal(400,300)。

访问性:pubilc 所有,protected 父和子类,private 只能该类

多重继承:class B:public C,public D

虚函数用来实现多态:在父类中的函数加上virtual(这个函数还子函数相同),这样在调用时根据对象的不同,来实现父或子类中的函数,实现了多态。

纯虚函数: virtual  void breathe() = 0;父中纯虚函数不具体实现,而是在子类中具体实现它(既是在继承时实现它)。包含纯虚函数的类是抽象类,父的纯虚函数必须在派生类中实现,否则派生类也变成抽象类不能实例化了。

函数的覆盖:在父类的函数virtual声明为虚函数,子类的函数和父的一样。

  注:覆盖和虚函数的多态不一样,因为多态是函数名一样,但内容不一样。而覆盖是父和子的函数不但名字一样连内容都一样,就是所有都一样。

函数的隐藏:和覆盖类似,但只是父函数不在声明为虚函数。剩下的就是父和子的函数也是一模一样的。调用父函数时:只需Derived(父类)::fn()//被隐藏的函数

#ifndef  ANIMAL_H_H

#define  ANIMAL_H_H

Class  .....

#endif   //这种方法是用来避免在多个文件包含相同头文件时,发生重复定义头文件。

 

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/syc0616/archive/2009/04/01/4040664.aspx

### C++ 中子父类关系及实现方式 #### 父类子类的概念 在C++中,当B继承A时,A被称为基父类),而B则称为派生子类)。这种设计允许程序员基于现有的数据型创建新的数据型,从而促进代码重用[^1]。 #### 继承的方式及其影响 C++支持多种型的继承,包括公有(public)、私有(private)以及保护(protected),不同的继承模式决定了派生如何访问其基中的成员。通常情况下,默认采用的是私有继承;然而,在面向对象编程实践中,更常见的是使用公有继承来构建父子类间的关系。 #### 对象切片现象 值得注意的是,尽管可以通过父类指针操作子类实例,但直接将子类对象赋值给父类对象会导致所谓的“对象切片”,即只保留属于父类部分的数据成员,丢失掉特化于子类的信息[^2]。 #### 成员覆盖隐藏 如果子类父类拥有相同名称的方法或属性,则会发生方法覆写或是字段遮蔽的情况。对于静态成员而言,这表现为一种简单的替换行为——子类版本会完全替代父类定义;而对于虚函数来说,则提供了多态性的基础,使得即使通过父类接口也能调用到实际对应的子类功能实现[^3]。 #### 使用示例 下面给出一段简单代码片段展示上述概念的应用: ```cpp #include <iostream> using namespace std; // 定义一个水果作为基 class Fruit { public: string name; virtual void showName() const{ cout << "This is a fruit." << endl; } }; // 苹果继承自Fruit class Apple : public Fruit { private: float weight; // 新增重量属性 public: Apple(float w):weight(w){ this->name="Apple"; } void showWeight()const{ cout<<"The apple weighs "<<this->weight<<endl; } // 覆盖showName() void showName() const override{ cout << "This is an " << this->name << "." << endl; } }; int main(){ Fruit* f=new Apple(0.5); f->showName(); // 输出: This is an Apple. // 体现了动态绑定特性 ((Apple*)f)->showWeight();// 强制转换后可访问特定成员 delete f; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值