VC++abc之二

掌握VC++

【1】C++比C优势体现在:
封装性:把操作数据以及操作数据的函数衔接在一起。提高内部数据的安全性。
继承性:提高代码的重用性。动物是一个类,狗是一个动物的对象狗可以从动物身上继承很多属性。
多态性。

【2】在C++中结构体中可以包含函数,而在C语言中不可以。

【3】C++中结构体和类可以通用。结构体中默认的是public而在类中默认的数据类型为private。

【3】protected类型:父类和子类之间访问。

【4】类:抽象出事物的属性。相当于设计产品的图纸。在计算机中不占用内存。
对象:类的具体化。相当于根据图纸设计出来的产品。
通常说的类的实例也称作类的对象。

【5】每一个类都必须有构造函数。如果类中没有构造函数,在程序运行时编译器会给类使用默认的构造函数。一旦在类中有构造函数则不会使用默认的构造函数。析构函数一样。当使用子类时会先进入父类的构造函数,然后再进入子类的构造函数。当子类的生命周期结束时会先进入子类的析构函数,然后再进入父类的析构函数。父类也称作基类,子类也叫派生类。

【6】函数的重载:函数的重载发生在同一个类中。函数的重载条件:函数的参数类型、个数不同,才能构成函数的重载。函数的返回值不同不能构成重载。
分析以下两种情况,是否构成函数的重载。
第一种情况:
(1)void output();
(2)int output();
第二种情况:
(1)void output(int a,int b=5);
(2)void output(int a);
对于第一种情况,当我们在程序中调用output()函数时,读者认为应该调用的是哪一个函数呢?要注意:只有函数的返回类型不同是不能构成函数的重载的。
对于第二种情况,当我们在程序中调用output(5)时,应该调用的是哪一个函数呢?调用(1)的函数可以吗?当然是可以的,因为(1)的函数第二个参数有一个默认值,因此可以认为调用的是第一个函数;当然也可以是调用(2)的函数。由于调用有歧义,因此这种情况也不能构成函数的重载。在函数重载时,要注意函数带有默认参数的这种情况。

【7】this指针:this指针是一个隐藏的指针。每当产生一个变量时,该对象都会产生一this指针,this指针指向对象本身。例如在一个类中成员变量中有x和y,但是成员函数中也有参数x和y:
Class Animal
{
Public:
Int x;
Int y;
Void changedata(int x,int y)
{
This->x=x;//This->x就是类的数据x
This->y=y;
}
};

【8】public:任何地方都可以被访问。
Protected:只能在子类中被访问。
Private:只能在自己类中被访问,连子类中也不能被访问。
如果父类中设置成protected则子类只能在子类内部被访问。

【9】子类当中向基类中带参数的构造函数传递参数的方式
class Animal
{
public:
Animal(int height,int weight)//父类的构造函数带有两个参数
{
}
};
class Fish:public Animal//继承
{
public:
Fish():Animal(400,300),a(1)//因为构造子类的时候需要先构造父类,此子类未带参数。
{ //子类当中向基类中带参数的构造函数传递参数的方式
//对于一个常量的初始化也可以采用此方式如a(1)
}
private:
const int a;//定义一个常量a
};

【10】函数的覆盖:当子类中的函数和父类中的成员函数一模一样时,则称作函数覆盖。函数的覆盖发生在父类和子类之间。

【11】C++的多态性:看例子
#include <iostream.h>
class Animal
{
public:
void breathe()//在此函数void前未加virtual称作早期绑定反之称作延迟绑定
{
cout<<"animal breathe"<<endl;
}
};

class Fish : public Animal
{
public:

void breathe()//函数的覆盖
{
cout<<"fish bubble"<<endl;
}
};

void fn(Animal *pAn)
{
pAn->breathe();
}
void main()
{
Fish fh;
Animal *pAn;
pAn=&fh; this | Animal| 先构造了Animal
fn(pAn);//理解Fish的内存模型。 |Fish | 然后再构造了Fish
}
运行结构为 animal breath。
但是传递的是Fish 对象fh的地址。在Animal类中的breathe函数void前加了virtual关键字时,当C++编译器在编译的时候,发现Animal类的breathe()函数是虚函数,这个时候C++就会采用迟绑定(late binding)的技术,在运行时,依据对象的类型(在程序中,我们传递的Fish类对象的地址)来确认调用的哪一个函数,这种能力就做C++的多态性。

【12】在基类成员函数前添加virtual,(前提是调用子类的地址)如果子类中有这一函数则调用子类的否则调用基类的。

【13】纯虚函数:virtual void breathe()=0;没有函数体。把包含有纯虚函数的类称为抽象类。抽象类是不能实例化对象的。纯虚函数就是不能确定这种行为,但是这种行为是必须的。表明不被实现但在派生类中可以实现。

【14】引用:就是一个别名。
int a=6;
int &b=a;//b是a的别名定义引用时就需要初始化 只有在定义时候&为引用其他地方为取址符号
b=5;//b改变时候a也改变
引用和指正的区别:一个指针变量存储的是地址值。指针变量本身也需要内存空间。

【15】包含文件<头文件> 和"头文件"区别:搜索路径起点不同
<头文件>:系统目录下搜索
"头文件":先到当前工程目录下搜索,如没有搜到则到系统目录下搜索。

【16】预编译指令防止被重复定义。如
#ifndef XXXXXX //如果为定义XXXXXX
#define XXXXXX 1 //则定义XXXXXXX为1 1也可以去掉则定义为空 继续
class Point
{

};
#endif
如果刚开始发现XXXXXX已经被定义了则直接跳到#endif后执行。
定义XXXXXX宏并不是想用XXXXXX而是为了避免重复定义。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值