1. 类就可以看作一个struct,类的方法,可以理解为通过函数指针的方式实现的,类对象分配内存时,只分配成员变量的,函数指针并不需要分配额外的内存保存地址。
2. c++中类的构造函数,就是进行内存分配(malloc),调用构造函数
3. c++中类的析构函数,就时回收内存(free)
4. c++是基于栈和全局数据分配内存的,如果是一个方法内创建的对象,就直接在栈上分配内存了。
专门在克隆时使用的构造函数,是构造拷贝函数,原型时“类名(const 类名&)",避免拷贝整个对象,在传递对象时,改为传递指针,同时将构造拷贝函数设置为私有这样做到强制限制。
5. 成员变量为私有,仅仅时编译时起到保护左右,实际内存模型没有变。
6. 继承是在原有的父类的内存模型上,再添加自己的数据
#include <stdio.h> #include <stdlib.h> class TestClass { public: int a; TestClass() { a = 1; printf("do constructor\n"); } ~TestClass() { printf("do destructor\n"); } TestClass(TestClass &src) { a = src.a; } }; void test(TestClass al) { printf("%d\n", al.a); } void test(TestClass *al) { printf("%d\n", al->a); } int main(void) { TestClass ac; printf("after constructor call\n"); printf("=================================\n"); test(ac); printf("after function call\n"); }
7. c++多态的实现方式:虚函数(virtual)+使用对象的指针调用:一个类的virtual函数会被分配一个全局数组,保存他们的地址。所有的这个类的对象共享。
如果是自己模拟实现override,实际就是要调用的实现使用函数指针,子类确定这些函数。
/* * test.cpp * * Created on: 2015年5月24日 * Author: jme */ #include <stdio.h> #include <stdlib.h> // 1. 定义一个函数指针 typedef void (*testFunc)(); class Base { public: testFunc getHandler() { return func; } // 函数指针 testFunc func; }; void funcImpl_1() { printf("funcImpl_1\n"); } void funcImpl_2() { printf("funcImpl_2\n"); } class Sub1: public Base { public: Sub1(){ // 2. 子类设置函数指针值 func = funcImpl_1; } }; class Sub2: public Base { public: Sub2() { this->func = funcImpl_2; } }; int main(void) { Base *baseC; Sub1 *upper = new Sub1(); Sub2 *lower = new Sub2(); baseC = upper; baseC->func(); baseC = lower; baseC->func(); }
c++的virtual语法:
/* * test.cpp * * Created on: 2015年5月24日 * Author: jme */ #include <stdio.h> #include <stdlib.h> class Base { public: // 如果是 virtual void testFunc(); void testFunc2(); }; class Sub1: public Base { public: Sub1(){ } virtual void testFunc(); void testFunc2(); }; class Sub2: public Base { public: Sub2() { } virtual void testFunc(); void testFunc2(); }; class Sub3: public Base { public: Sub3() { } void testFunc(); void testFunc2(); }; void Base::testFunc() { printf("base testFunc\n"); } void Base::testFunc2() { printf("base testFunc2\n"); } void Sub1::testFunc() { printf("Sub1 testFunc\n"); } void Sub1::testFunc2() { printf("Sub1 testFunc2\n"); } void Sub2::testFunc() { printf("Sub2 testFunc\n"); } void Sub2::testFunc2() { printf("Sub2 testFunc2\n"); } void Sub3::testFunc() { printf("Sub3 testFunc\n"); } void Sub3::testFunc2() { printf("Sub3 testFunc2\n"); } void callWithPointer(Base *baseC) { // 因为定义了虚函数, 同时是指针调用,会查虚表,确定具体的实现函数 baseC->testFunc(); } void callWithoutPointer(Base baseC) { // 虽然定义了虚函数, 但是是直接对象调用懂,不会查虚表。 baseC.testFunc(); } void call2(Base *baseC) { // 静态覆盖的实现,根据具体的类型来确定调用的是父类还是子类的 baseC->testFunc2(); } int main(void) { Sub1 s1; Sub2 s2; Sub3 s3; callWithPointer(&s1); callWithPointer(&s2); callWithPointer(&s3); printf("=================\n"); callWithoutPointer(s1); callWithoutPointer(s2); callWithoutPointer(s3); printf("=================\n"); call2(&s1); call2(&s2); call2(&s3); }
相关推荐
【C++面向对象的理解】 C++是一门强大的编程语言,尤其以其面向对象特性著称。面向对象编程(Object-Oriented Programming, OOP)是一种设计理念,它基于对象、类、继承、封装、多态等核心概念。8年的编程经验使得...
根据给定文件的信息,我们可以总结出以下相关的C++知识点: ### 面向对象程序设计C++课后答案概述 ...这些知识点涵盖了从C++的基本语法到面向对象编程的核心概念,为学习者提供了全面的理解和应用C++的基础。
《殷人昆数据结构用面向对象方法与C++语言描述》是数据结构领域一本重要的教材,尤其对于学习C++编程的计算机科学和技术专业的学生来说,它提供了深入理解数据结构和算法的基础。本书的第二版在第一版的基础上进行了...
C++是一种支持面向对象编程(OOP)的强类型、编译型、通用编程语言,由Bjarne Stroustrup在C语言的基础上发展而来,既具有过程性编程的特点,又引入了面向对象的特性。 标题"面向对象技术与C++编程"表明这组课件...
本书《面向对象编程:C++与Java比较教程》详细比较和对比了当今最流行的两种编程语言C++和Java,旨在教授互联网时代至关重要的技能和面向对象编程技术。作者Avinash C. Kak凭借其成功教授的课程,撰写了一本全面的...
总之,从C++转向Java的过程中,理解面向对象编程的概念以及Java与C/C++之间的主要差异至关重要。通过学习Java的运行机制、面向对象的核心特性、文件结构与命名空间管理以及异常处理等知识,开发者可以更好地适应Java...
《麻省理工免费课程:C语言内存管理和C++面向对象编程》是一门非常有价值的课程,旨在帮助程序员深入理解C语言和C++的核心概念和技术。通过学习这门课程,学生不仅能够掌握有效的内存管理技巧,还能了解这两种语言的...
C、C++和Java是三种支持面向对象编程的编程语言,尽管它们在实现OOP的理念上有所不同。 首先,让我们来看看C++。C++是在C语言的基础上添加了面向对象的特性。C++的类(Class)是实现面向对象的核心,它定义了一组...
本教程对比了两种广泛应用的面向对象语言——C++和Java,帮助读者深入理解两者之间的异同。 C++是Bjarne Stroustrup于1983年创建的,它是C语言的扩展,增加了类、模板、异常处理等面向对象特性。C++强调性能和灵活...
本资源集合是"李爱华"和"程磊"编写的《面向对象程序设计》一书第二章的C++语言基础案例源程序,涵盖了C++的基本要素,旨在帮助学习者通过实践理解C++的基础知识。 在第二章中,主要讨论了C++语言的基础,包括以下几...
《C语言面向对象设计》这本书会详细讲解如何在C语言中实现这些概念,并通过实例帮助读者理解和应用。通过学习这本书,开发者能够了解如何在C语言环境中利用面向对象设计来提高代码的可读性、可维护性和可扩展性。这...
这个实验代码`test2`提供了一个实践C++面向对象编程的平台,通过分析和运行这些代码,你可以更好地理解面向对象编程的各个方面,并提升自己的编程技巧。在学习过程中,一定要动手尝试修改和扩展代码,这样能更深刻地...
本书《面向对象程序设计与C++语言》由朱战立编写,旨在帮助读者深入理解面向对象编程思想以及如何在C++中实现这些思想。书中可能涵盖了以下几个方面的内容: 1. **面向对象基础**:讲解对象、类、封装、继承、多态...
面向对象编程(Object-...总之,C++和Java虽然都是面向对象的语言,但在实现细节和应用领域上有所区别。理解和掌握这两种语言的不同特性,将有助于程序员根据项目需求选择合适的工具,并在不同语言之间无缝切换。
C++语言是实现面向对象编程的主要工具之一,由Bjarne Stroustrup于1983年在C语言的基础上扩展而来,旨在提供更高级别的抽象和模块化能力。 在学习面向对象编程时,首先要理解的是类(Class)和对象(Object)。类是...
面向对象程序设计是C++的核心特性之一,它允许我们通过类和对象来组织和管理代码。在C++中,类定义了一组相关的数据和操作这些数据的方法,而对象则是类的实例,具有类所定义的属性和行为。 1. `break` 和 `...
《C++面向对象与Visual C++程序设计案例教程》是一本非常实用的教材,它不仅仅局限于理论知识的介绍,更重要的是通过实际案例引导读者理解和掌握C++面向对象编程以及Visual C++程序设计的相关技术。无论是对于初学者...
C++是一种支持面向对象编程的强类型、编译型语言,由Bjarne Stroustrup于1983年在C语言的基础上扩展而成。 在C++中,面向对象的核心概念包括: 1. 类(Class):类是对象的模板或蓝图,定义了一组特性和行为。它...
总之,《C语言面向对象编程》这本书为那些没有C++编译器环境的程序员提供了宝贵的资源,特别是对于那些在嵌入式系统、小型系统等领域工作的开发者来说尤其重要。通过这些技巧,可以在不使用C++的情况下实现面向对象...