学习
实践
活动
工具
TVP
写文章

C++继承的基本语法与三种继承方式

继承的基本语法 例如我们看到很多网站中,都有公共的头部,公共的底部,甚至公共的左侧列表,只有中心内容不同 接下来我们分别利用普通写法和继承的写法来实现网页中的内容,看一下继承存在的意义以及好处 普通实现 继承方式 继承的语法:class 子类 : 继承方式 父类 继承方式一共有三种: 公共继承 保护继承 私有继承 示例: class Base1 { public: int m_A; protected : int m_B; private: int m_C; }; //公共继承 class Son1 :public Base1 { public: void func() { m_A = 类外访问不到 } //保护继承 class Base2 { public: int m_A; protected: int m_B; private: int m_C; }; class Son2 m_A; //m_B; //m_C; } };

10820

c++ 之三种继承方式的学习总结

一、三种继承方式: 1、从问题引出主题: (1)冒号(:)表示继承关系,Parent表示被继承的类,public的意义是什么? 2、c++中支持三种不同的基础方式 public继承:父类成员在子类中保持原有访问级别 private继承:父类成员在子类中变为私用成员 protected继承:父类中的公有成员变为保护成员,其它成员保持不变 继承成员的访问属性: =Max{继承方式,父类成员访问属性} 注意:c++中的默认继承方式为private 代码实践: #include <iostream> #include <string> using 3、遗憾的事实 一般而言,c++工程项目中只使用public继承 c++的派生语言只支持一种继承方式(public继承) protected和private继承带来的复杂性远大于实用性 二、总结 c++ 中支持3种不同的继承方式 继承方式直接影响父类成员在子类中的访问属性 一般而言,工程中只使用public的继承方式 c++的派生语言中支持public继承方式 好了,今天的分享就到这里,如果文章中有错误或者不理解的地方

7120
  • 广告
    关闭

    热门业务场景教学

    个人网站、项目部署、开发环境、游戏服务器、图床、渲染训练等免费搭建教程,多款云服务器20元起。

  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    C++创建对象的三种方式

    { } ~A(){} }; int main() { A a(1); //栈中分配 A b = A(1); //栈中分配 A* c = new A(1); //堆中分配   delete c; return 0; }   第一种和第二种没什么区别,一个隐式调用,一个显式调用,两者都是在进程虚拟地址空间中的栈中分配内存 ,而第三种使用了new,在堆中分配了内存,而栈中内存的分配和释放是由系统管理,而堆中内存的分配和释放必须由程序员手动释放。 采用第三种方式时,必须注意一下几点问题: new创建类对象需要指针接收,一处初始化,多处使用 new创建类对象使用完需delete销毁 new创建对象直接使用堆空间,而局部不用new定义类对象则使用栈空间 堆则是C/C++函数库提供的,它的机制是很复杂的,例如为了分配一块内存,库函数会按照一定的算法(具体的算法可以参考数据结构/操作系统)在 堆内存中搜索可用的足够大小的空间,如果没有足够大小的空间(可能是由于内存碎片太多

    27520

    Java代码复用的三种常用方式继承、组合和代理

    还有高级的复用方式吗? 有,当然有。Java作为一种优秀的面向对象设计的语言,在复用的应用上就高级得多了。 01 继承 最常见的复用方法就是继承——使用extends关键字在基类的基础上创建新类,新类可以直接复用基类的非private的属性和方法;就像程序清单1-1那样。 需要注意的是,如何在继承和组合之间做出选择呢? 一个药丸十块钱"); } } 从程序清单3-1中我们可以看得出,代理的模式和组合有点类似,但又有差别——代理成功的隔开了新类(会员)和已有类(店铺)的直接关系,使得已有类的方法不直接暴露在新类面前(组合的方式会将已有类的非 使用final的场景有三种,分别是数据、方法和类。我们来稍作说明。

    31320

    C++多线程的三种创建方式

    C++11的新特性std::thread的创建方式主要有:函数指针,类或结构体,lambda表达式。下面将会附上这三种创建线程方式的code。 首先第一个是通过函数指针的方式来创建: 不带参数: #include <iostream> #include <thread> using namespace std; void A() { (A(1, 2), 2, 3); t3.join(); cout << "this is main thread" << endl; return 0; }        第三种就是通过 > #include <thread> using namespace std; int main() { int a = 1; thread t = thread([a](int b,int c) { cout << a + b + c << endl; // 输出为6 cout << "This is f thread" << endl; }, 2, 3);

    2.9K20

    C# 生成chart图表的三种方式

    { ch[i].ChartAreas.Clear(); ChartArea chartArea1 = new ChartArea("C1 Series.Clear(); Series series1 = new Series("S1"); series1.ChartArea = "C1

    1.2K20

    C#CreateGraphics方法的三种实现方式

    例如: Graphics g = this.CreateGraphics(); 方法三、调用Graphics类的FromImage静态方法 由从Image继承的任何对象创建Graphics对象 img = Image.FromFile("g1.jpg");//建立Image对象 Graphics g = Graphics.FromImage(img);//创建Graphics对象 传送门:C#

    56670

    C++继承

    ——继承与派生; 在c++中将继承的一方称作派生类或者子类,将被继承的一方叫做基类或者父类继承的基本格式如下(CB 继承CA): class CA { public: CA(); ~CA TCHAR* argv[]) { CB objB; return 0; } 最终的结果是先调用基类的构造函数在调用派生类的构造函数,而对于析构的调用顺序正好相反,先调用派生类在调用基类: 对于继承来说有三种 :共有继承、私有继承以及保护继承继承方式不同,派生类对于基类的各种不同属性之间成员的访问权限不同,下面再给出一个表格用以说明这个问题: 通过这个表我们可以总结出一下几点: 1)私有成员在任何情况下都不能被派生类访问 ,我们知道基类的非私有成员在保护继承下公有的变为保护,保护的仍然为保护,而私有继承则是将所有都变为私有,他们之间如果都是保护继承方式,那么CA中的其他成员在CB中都变为保护类型那么在CC中仍然能够访问到 CA的成员;当他们之间都是以私有继承方式,那么CA中的成员在CB中都为私有,在CC中就不能访问CA中的成员,所以在一般情况下,我们将基类的数据成员声明为保护类型,这样既起到了封装的作用,又方便派生类的访问

    23820

    C#继承

    关于继承--和子承父业一样一样滴,----你继承了谁谁的东西也归你所有了 using System; using System.Collections.Generic; using System.Linq public static void a2() { Console.Write("a2"); } } class b : a//b 类继承了 a { } } class b : a//b 类继承了 a { } 就相当于 class b {      public

    32150

    c++–继承

    面向对象程序设计中最重要的一个概念是继承继承允许我们依据另一个类来定义一个类,这使得创建和维护一个应用程序变得更容易。这样做,也达到了重用代码功能和提高执行效率的效果。 继承类型 当一个类派生自基类,该基类可以被继承为 public、protected 或 private 几种类型。继承类型是通过上面讲解的访问修饰符 access-specifier 来指定的。 我们几乎不使用 protected 或 private 继承,通常使用 public 继承。 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。 多继承继承即一个子类可以有多个父类,它继承了多个父类的特性。 C++ 类可以从多个类继承成员,语法如下: class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> }; 其中,访问修饰符继承方式是 public、protected

    8110

    C++继承

    继承访问权限 父类public 父类protect 父类private public继承 public protect --- protect继承 protect protect --- private 继承 private private --- 先看继承的权限关键字,再看父类的成员变量声明关键字。 静态成员变量 遵循集成规则 使用前必须先定义 多继承产生的成员变量多义性 多个继承继承自同一个祖先类,祖先类中的成员变量使用会产生二义性。如下: ? << "A size=" << sizeof(A) << endl; cout << "B size=" << sizeof(B) << endl; <em>C</em> <em>c</em>; // <em>c</em>.x A size=4 B size=4 A B A B1 <em>C</em> 测试二,把//<em>c</em>.x的注释打开。

    16440

    C++继承

    Contents 1 基本概念 2 访问控制和继承 3 继承类型 4 多继承 5 参考资料 基本概念 面向对象程序设计一个重要的概念就是继承继承允许我们依据另一个类来定义一个类。 // 派生类 class Rectangle1: public Shape; // 常用继承方式 class Rectangle2: private Shape; class Recttangle3: protected Shape; 我们几乎不使用 protected 或 private 继承,通常使用 public 继承。 私有继承(private):当一个类派生自私有基类时,基类的公有和保护成员将成为派生类的私有成员。 多继承继承即一个子类可以有多个父类,继承了多个父类的成员变量和函数。 语法如下: class <派生类名>:<继承方式1><基类名1>,<继承方式2><基类名2>,… { <派生类类体> }; 参考资料 http://www.runoob.com/cplusplus/cpp-inheritance.html

    8920

    C# 三种方式实现Socket数据接收(经典)

    之前一般采用如下方式进行数据接收: int recv;//定义接收数据长度变量 IPEndPoint ipEnd = new IPEndPoint(IPAddress.Parse 以下分别采用三种方式实现了数据的正常接收,代码如下: using System; using System.Collections.Generic; using System.ComponentModel

    3.6K20

    C++之继承相关问题——菱形继承&继承

    什么是菱形继承?菱形继承的问题是什么? 菱形继承:菱形继承是多继承一种特殊的继承方式。如下如所示为一菱形继承 ? 即两个派生类继承同一个基类,同时两个派生类又作为基本继承给同一个派生类。 : int _c; }; class D : public B, public C { public: int _d; }; int main() { D d; 下图是菱形虚拟继承的内存对象成员模型:这里可以分析出D对象中将A放到的了对象组成的最下面,这个A同时属于B和C,那么B和C如何去找到公共的A呢?这里是通过了B和C的两个指针,指向的一张表。 术语“白箱”是相对可视性而言:在继承方式中,基类的内部细节对子类可见 。 继承一定程度破坏了基类的封装,基类的改变,对派生类有很大的影响。派生类和基类间的依赖关系很强,耦合度高。 4.c++之哪些成员函数不能被继承 构造函数:在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。

    3.6K30

    C++:13---继承(单一继承、多重继承、多级继承、菱形继承、虚继承

    一、基类与派生类的概念 基类(父类):在继承关系中处于上层的类 派生类(子类):在继承关系中处于下层的类 class A; class B; class C:public A //C为A的子类,A为C B :public A //单一继承 { }; 五、多重继承 一个类只继承于多个类叫做多重继承 class A{}; class B {}; class C :public B, public 在宏观上叫做多级继承 class A{}; class B :public A {}; class C :public B { }; 七、菱形继承 概念:A作为基类,B和C继承与A。 最后一个类D又继承于B和C,这样形式的继承称为菱形继承 菱形继承的缺点: 数据冗余:在D中会保存两份A的内容 访问不明确(二义性):因为D不知道是以B为中介去访问A还是以C为中介去访问A,因此在访问某些成员的时候会发生二义性 :public A { public: C(int a, int c) :A(a), m_c(c) {} private: int m_c; }; class D :public B, public C

    1.3K30

    干货 | c语言函数宏的三种封装方式

    因此,在工程中,一般使用三种方式来对函数宏进行封装,分别为 {} 、 do{...}while(0) 和 ({}) 。下文将一一对三种方式进行分析,比较各自的优劣点。 /mnt/hgfs/share/pr_c/src/main.c: In function ‘main’: /mnt/hgfs/share/pr_c/src/main.c:18:2: error: ‘else \n"); } 可见,不使用 ; 的调用方式无论从程序阅读还是使用方法方面都是十分别扭的;而规定必须使用带花括号的 if 的调用方式有违常理的,因为宏函数应该适用于任何语法。 4. ({ }) 方式 ({}) 为 GNU C 扩展的语法,非 C 语言的原生语法。 总结 综上,在 {} 、 do{...}while(0) 和 ({}) 这三种函数宏的封装方式之中,应尽可能不使用 {} ,考虑兼容性一般选择使用 do{...}while(0) ,当需要函数宏返回时可以考虑使用

    6720

    C语言中函数参数传递的三种方式

    C语言中函数参数传递的三种方式 (1)传值,就是把你的变量的值传递给函数的形式参数,实际就是用变量的值来新生成一个形式参数,因而在函数里对形参的改变不会影响到函数外的变量的值。 3,值传参 -> 在传参过程中,首先将c的值复制给函数c变量,然后在函数中修改的即是函数的c变量,然后函数返回时,系统自动释放变量c。而对main函数的c没有影响。 指针传递的实质: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值。 在C++中,指针和引用经常用于函数的参数传递,然而,指针传递参数和引用传递参数是有本质上的不同的: 指针传递参数本质上是值传递的方式,它所传递的是一个地址值。 引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。

    13410

    js各种继承方式汇总

    方式) 特点: 1、子类的构造中进行父类构造的调用 优点: 1、实现了多继承,想继承哪个直接在子类构造里面call或者apply哪个就行 2、避免所有子类实例共享父类引用属性问题 3、创建子类实例时 ,可以向父类传递参数 缺点: 1、没用到原型,只是单纯继承了父类的实例属性及方法 2、没继承原型上的属性及方法 3、每个子类都有父类方法属性的副本,影响性能,没有实现父类函数复用 function ) // false,等于是复制父类的实例属性给子类,没用到原型 实例继承 特点: 1、子类的构造中返回父类的实例 优点: 1、可以继承原型上的属性或方法 缺点: 1、实例为父类实例,而非子类实例 (暴力继承) 特点: 1、子类的构造中强制拷贝父类原型上的属性或方法 优点: 1、可以多重继承 缺点: 1、效率较低,内存占用高 2、不能继承父类不可枚举的属性(不能用for in遍历的) Animal) // false 组合继承(构造继承+原型链继承) 特点: 1、组合构造继承和原型链继承 优点: 1、可以继承实例属性/方法,也可以继承原型属性/方法 2、既是子类的实例,

    68370

    扫码关注腾讯云开发者

    领取腾讯云代金券