10 练好基本功

尚未进行身份认证

我要认证

我太懒了,真的什么也没有留下。。。。。。。。

等级
TA的排名 18w+

当结构体遇上宏定义,以及函数指针的高级写法(结构体中能用宏定义一个函数?)

一、结构体中可以定义一般的宏定义 如:struct aaa{ #define STATUS_1 100 #define STATUS_2 200 #define STATUS_3 300 ........}; 首先,这里的宏定义是在预编译阶段完成的,编译器此时并不知道什么结构体,所以这些宏是全局可见的。 一个宏定义,如果写在结构体之内,即使与结构体之外的宏定义

2016-03-10 09:37:40

拷贝构造函数的参数为什么必须是引用?

我们知道类中经常要用到拷贝构造函数,但是在使用的时候有没有想过,为什么他的参数必须是引用? 不是引用不行么?

2015-08-25 11:18:23

父类指针能否找到子类成员及定位虚指针

多态实现时能否找到子类独有的成员: 先看如下代码:class Parent{public: int a; int b; void SetA(int a) { this->a = a; } virtual void printA() { cout << "Parent" << endl; }};

2015-07-28 12:48:08

C++类中静态变量和静态方法的注意事项

一 静态变量 1、静态变量必须在外部定义和赋值 a、不能在 main() 函数中定义 b、不能在类的构造函数中定义 2、必须要定义静态变量,否则该变量没有内存空间(类中只是申明) 3、类本身可以直接调用静态变量 4、静态变量依旧符合public、private、protect特性 二 静态方法 1、静态方法可以被类直接调用,但是同静态变量一样符合public、priva

2015-07-26 13:51:04

C++中模板类使用友元模板函数

问题始于学习数据结构,自己编写一个单链表,其中用到了重载输出运算符<<,我写的大约这样:template <class T> class List{ friend std::ostream& operator << (std::ostream& os,const List<T>& slist); //……};用vs2008可编译,但无法链接:无法解析的外部符号后来上网查改为t

2015-07-21 00:32:39

为什么要用虚析构函数

1 问题引出:为什么要使用虚析构函数?class A //父亲{public: ~A() { cout << "调用了父亲的析构函数"<<endl; }};class B : public A //儿子{public: ~B() { cout << "调用了儿子的析构函数" << endl; }};int

2015-07-15 17:57:48

C++虚函数

C++中的虚函数(virtual function) 1.简介 虚函数是C++中用于实现多态(polymorphism)的机制。核心理念就是通过基类访问派生类定义的函数。假设我们有下面的类层次:class A{public:virtual void foo() { cout << "A::foo() is called" << endl;}};class B: public A{p

2015-07-14 13:25:53

虚函数、虚指针和虚表

关于虚函数的背景知识用virtual关键字申明的函数叫做虚函数,虚函数肯定是类的成员函数。存在虚函数的类都有一个一维的虚函数表叫做虚表。类的对象有一个指向虚表开始的虚指针。虚表是和类对应的,虚表指针是和对象对应的。多态性是一个接口多种实现,是面向对象的核心。分为类的多态性和函数的多态性。多态用虚函数来实现,结合动态绑定。纯虚函数是虚函数再加上= 0。并且该函数只有声明,没有实现。抽象类是指

2015-07-13 19:03:51

构造函数为什么不能是虚函数

从存储空间角度,虚函数对应一个指向vtable虚函数表的指针,这大家都知道,可是这个指向vtable的指针其实是存储在对象的内存空间的。问题出来了,如果构造函数是虚的,就需要通过 vtable来调用,可是对象还没有实例化,也就是内存空间还没有,怎么找vtable呢?所以构造函数不能是虚函数。从使用角度,虚函数主要用于在信息不全的情况下,能使重载的函数得到对应的调用。构造函数本身就是要初始化实例,那

2015-07-13 18:29:52

虚指针存在证明及虚函数表

C++多态的实现原理是依赖虚指针来辨别具体使用家族类中的哪一个函数。以下就来证明虚指针的存在。我们知道,指针的大小在一般情况下是4个字节,所以我们建立一个虚函数,再来计算该类的大小,便可以验证虚函数的存在。代码如下:#include <iostream>using namespace std;class A{public: void print ()

2015-07-13 16:14:14

C++面向对象模型

1、 基础知识C++编译器如何完成面向对象理论到计算机程序的转化? 换句话:C++编译器是如何管理类、对象、类和对象之间的关系 具体的说:具体对象调用类写的方法,那,c++编译器是如何区分,是那个具体的类,调用这个方法那? 思考一下程序结果#include "iostream"using namespace std;class C1{public:int i; //4int j; //

2015-07-13 13:32:01

类中重载和重写的区别

函数重载 必须在同一个类中进行 子类无法重载父类的函数,父类同名函数将被名称覆盖 重载是在编译期间根据参数类型和个数决定函数调用 函数重写 必须发生于父类与子类之间 并且父类与子类中的函数必须有完全相同的原型 使用virtual声明之后能够产生多态(如果不使用virtual,那叫重定义) 多态是在运行期间根据具体对象的类型决定函

2015-07-13 13:08:36

类中static并没有那么简单

class A{public: static int a; void printA () { cout << a << endl; }};void main (){

2015-07-12 11:14:36

继承时的初始化列表

问题引出:class Test{public: Test(int a, int b) { this->a = a; this->b = b; }private:

2015-07-11 19:34:02

操作符重载:什么时候返回引用

返回一个已经存在的对象或者变量时最好返回一个引用(可以避免返回值做左值时的一些麻烦,以及不用生成匿名变量,可以节约资源,提高效率。),如:Complex & operator++(Complex & c){ c .a ++; c .b ++; return c ;}返回一个临时变量时,那么不要返

2015-07-10 20:31:50

函数的返回值当左值

如果函数的返回值要当左值,那么必须返回一个引用:class Array{private: int mLength; int* mSpace;public: Array(int length){if( length < 0 ) {length = 0; }mLength = length;mSpace = new int[mLength];}

2015-07-10 15:22:56

部分运算符只能用友元函数(全局函数)重载 以及链式法则

有些运算符只能用友元函数(全局函数)重载,无法使用成员函数重载,如:class Complex{public: Complex() { } Complex(int a,int b) {

2015-07-10 12:46:57

operator= 要注意避免内存泄露(项目经验)

指针不论是指向malloc还是new分配得到的内存,一定要注意在改变指针指向之前一定要先释放旧的内存块。class Test{public:                 Test()                {                                 if (p != NULL)                         

2015-07-08 17:14:40

类的匿名对象管理模型

类中匿名对象的生成

2015-07-08 16:53:53

C++编译器对类中成员函数的处理(引用this指针)

定义对象的过程可以理解为: Test   t(1,2)=====> Test  (this,1,2)====> Test  (&t,1,2)

2015-07-07 16:12:40

查看更多

勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!