1,如果派生类和基类有相同名字的变量,派生类会覆盖基类的变量吗?
class A { int i; };
class B : public class A { int i; };
不会覆盖,只会隐藏,sizeof(A) = 4, sizeof(B) = 8可以证明这一点,隐藏的意思是说通过派生类的对象或指针无法访问基类的变量,实际上,编译器可能会对类的member加上class名称,形成独一无二的命名,这个过程叫做name-mangling, 处理后class B变成:
class B { int i1A; int i1B; } ;
2.为什么static member function不能用const修饰
static void foo() const {} //Error
我们都知道,const函数不能改变对象,那么它是怎样做到这一点的呢?答案是用const修饰this指针,内部转化过程:
void foo() const { } ----------------->void foo(const this) { }, 然而static函数没有this指针,所以也就没必要用const声明了。
3.一句话总结派生类如何利用基类:
我有的东西绝不跟你要,我没有的东西一定跟你要,如果你也没有,就算了。
4.哪些函数是虚函数(virtual function)?
(1).使用virtual关键字声明的: class A { virtual void foo() {} }; 这样的函数是virtual function
(2).从基类继承而来的,且重写(overrided)了:
class A { virtual void foo() {} }; class B : public class A { void foo() {} };
我们说Class B的foo()函数也是virtual function
(3).从基类继承而来的,没有重写:
class A { virtual void foo() {} }; class B : public class A { };
虽然class B没有foo()的定义,但class B有一个virtual function,那就是A::foo(),因为它是从class A继承而来的。
(4)基类的destructor是virtual的
class A { virtual ~A() {} }; class B : public class A { ~B() {} };
我们说class B的destructor也是virtual function
对于所有上述virtual function,编译器都会把它们的首地址保存在一个Virtual Table里面。
注意构造函数不
能是virtual functjion,从实现上来说,调用virtual
function需要保证设置好vptr,而调用造函数时这个vptr根本还没初始化,也就不能使用,所以不能把构造函数声明为virtual.
从实际意义来说,调用构造函数意味着想要创建一个类的对象,这个类是确定的,所以它所调用的构造函数也是确定的,故没必要把构造函数变为virtual。
4。满足哪些条件才会重载(overrid)基类的函数
C++标准规定,只有函数名,参数列,返回值类型都相同,才会重写,下列函数都会重载:
void func()-------void func()
virtual void func() ------void func()
void func() ---------virtual func()
virtuan void func() --------virtual void func()
注意这里的返回值支持多态,也就是如果class Derived : public Base那么这个函数也会重写
Base *clone() ---------Derived *clone()
5.以下两个函数有什么区别?
int k = 5;
int *j = k;
void func1( int * i) {}
void func2( int * & i) {}
本质上,两个函数的实参都是一个变量的地址,但有一点微小的却别。
func1的形参类型为int *,那么实参可以为指针变量,也可以为int变量的地址,所以有两种调用方式:
func1( &k );
func1( j );
func2的形参为指针的引用,那么实参必须是指针变量,所以只能这样调用:
func2( j )
6。友元函数的作用是什么?
大多数时候都会把类的data members声明为protected,这样的封装符合面向对象的设计原则,但有些时候我们会很想访问一个对象的protected成员,可以在类里面插入一个友元函数,把它的参数设为类的引用,然后在类的外面定义它,通过参数--对象的引用来访问protected成员。
7. 基类的虚析构函数的作用是什么?
阻止基类被实例化,如果基类有其它的virtual function,则虚析构函数就没必要,但如果基类没有其他的virtual function,则虚析构函数就很有必要了。
分享到:
相关推荐
### 《C++沉思录》关键知识点解析 #### 一、深入理解 C++ 核心概念 **设计哲学与特性解析:** Scoot Meyers 在《C++沉思录》中对 C++ 语言的核心概念进行了深入的剖析。本书不仅介绍了 C++ 的基本语法,更重要的...
《C++ 沉思录》是一本深受程序员喜爱的C++编程书籍,它深入探讨了C++语言的精髓和编程技巧。随书提供的实例源代码是理解和掌握书中的概念和实践的重要辅助材料。这些源代码涵盖了C++的基础到高级应用,旨在帮助读者...
《C++沉思录》是一本深受欢迎的C++编程指南,它以其深入浅出的讲解方式和对C++核心概念的透彻分析而著称。这本书旨在帮助读者理解C++语言的内在机制,提升编程技能,从而更好地利用C++进行软件开发。以下是基于这个...
《Thinking in C++(第二版)》是一本专注于C++编程语言的经典教材,它的全面性和深度使得它成为想要深入学习C++的程序员的重要资源。本书不仅涵盖C++的基础知识,还包括了设计模式、标准模板库(STL)、异常处理等...
《C++沉思》与《C++编程思想》是两部深受C++程序员喜爱的经典著作,它们深入浅出地探讨了C++语言的核心概念、设计模式以及编程实践。这两本书籍对于想要提升C++技能或者对面向对象编程有深度理解的人来说,是不可或...
C++沉思录.pdf作为压缩包中的唯一文件,很可能就是该书的电子版。这本PDF文件可能会涵盖以下几个方面的高级C++知识点: 1. **面向对象编程**:C++的基石是面向对象编程,书中可能会深入讲解类的设计原则,如封装、...
C\C++编程开发PDF[15本].rar C Primer Plus 5th C Primer_Plus C++ Primer Plus 6th ...C++ 沉思录 C++ 程序设计原理与实践 C++ 高级编程_本地没有找到 C++ 语言99个常见编程错误 C++ 语言的设计和演化
《Thinking in C++》是C++编程领域的一本经典著作,由Bruce Eckel撰写,旨在帮助程序员深入理解和掌握C++语言。第二版的第一卷主要关注的是标准C++的基础概念和核心特性,为初学者和有经验的程序员提供了一个全面而...
c++沉思录.pdf; Effective_STL.chm; effectiveC++.chm; Thinking in C++ 中文版.pdf; 标准C++输入输出流与本地化.pdf; 泛型编程与STL.pdf; 美河提供.STL.源码剖析.pdf; 高质量C++C编程指南.pdf; 计算机算法...
在本压缩包中,包含四本极具影响力的C++学习资料,分别是《C++沉思录》、《C++程序设计原理与实践》、《C++设计新思维》以及《Thinking in C++》。这些书籍覆盖了C++的基础、进阶到设计模式等多个方面,对于想要深入...
* 《C++ 沉思录》:这本书详细介绍了 C++ 的高级语法和编程技术,是 C++ 程序员的必备书籍。 阶段三:高级阶段 在 C++ 的发展方向中,高级阶段是专家阶段,程序员需要掌握 C++ 的高级技术和框架。本阶段推荐的书籍...
Lippman 的 Inside the C++ Object Model、Koenig 的 C++ 沉思录等书籍,这些书籍都讲述了 C++ 的基础知识和高级编程技术。 作者最后强调,学习 C++ 需要阅读大量的书籍,并且需要了解语言的历史和设计理念。同时...
2. **《C++沉思录》** 这本书可能侧重于对C++语言的哲学思考和深度理解,探讨C++的精髓和设计背后的意图。读者可能会接触到如C++的类型系统、运算符重载、命名空间、模板、继承与多态、静态与动态绑定等核心概念的...
"C++沉思录"则更偏向于高级主题,如设计模式、STL(Standard Template Library)以及C++11及后续标准的新特性。书中的源码涵盖了各种复杂的设计和实现,是提高C++编程技巧的宝贵资源。读者可以通过分析这些代码,...
推荐的参考书目包括《C++编程思想》、《程序设计实践》、《C++程序设计》、《Effective C++》、《C++标准程序库》、《C++程序设计语言》、《C++沉思录》以及《设计模式》。这些书籍涵盖了C++的基础知识、编程实践、...
5. **《C++沉思录》**:本书深入探讨了C++的设计哲学和高级技术,非常适合进阶学习者。 6. **《Exceptional C++》和《More Exceptional C++》**:专注于C++异常处理和常见编程陷阱,帮助避免潜在错误。 7. **...
散文集 1 source 1 ss vc 1 入门 2 1 面试题 1 delphi 1 java 1 经典 1 基础 1 全集 1 windows 2 1 管理 1 设计 1 数据库 1 数据结构 1 1800例 1 电子书 1 c++沉思录 1 答案 1 server 1 sql 1 edition 1 3rd 1 ...
2. C++沉思录:《C++沉思录》是Andrei Alexandrescu所著,这本书深入讨论了现代C++编程的方方面面,可能包括设计模式、模板编程等内容。 3. C++高级参考手册:这类参考手册往往详细地解释了C++语言的各个部分,如...
- **《C++沉思录》**:这本书以问答的形式探讨了许多高级话题。 - **《STL源码剖析》**:详细分析了STL的内部实现。 对于那些希望挑战极限的读者,还可以尝试阅读关于模板和模板元编程的书籍: - **《C++ ...
其次,《C++沉思录》则深入探讨了C++这一现代面向对象编程语言的精髓。C++在C语言的基础上增加了类、模板、异常处理、多态性等特性,使得代码更加模块化,易于维护。读者会了解到如何设计和实现类,掌握面向对象编程...