从C语言到C++(一)

1.输入输出流

using std::cout;//标准输出流
using std::endl;//换行


cout << em1.t->a;
cout << endl;


2.结构体的声

在c++里,不需要加struct


3.类的定义

类名称前面加C,类成员前面加m_如果不加关键字public和“:”,默认为“private”,即如果你在main里面用.调用他,就会报错


4.类的成员函数

成员函数调用成员变量时,不需要成员变量的声明public。如果函数前面没有public,也不能被外界访问。函数不增加类的大小,即他储存在内存里。调用函数时,必须用点运算符取他。

class CBox

{

double Vol(void);

}

double CBox::Vol()//类型 类名称 作用域解析运算符 函数名称

{}


5.内联函数

编译器暗中讲定义在类中的函数作为内联函数对待,如果函数声明在外面,加上关键字inline即可。

内联函数首先要保证不会出现变量的作用域等方面的问题,其次适合于短小的函数。

内联函数是指用函数体代码去替代函数的调用,从而提高运行速度。


6.类构造函数用来给类初始化。不允许有返回值,void也不行。命名固定,必须和类名称相同,然后加()

程序如下:

class CBox

{

int m_a;

CBox(int a)

{

m_a=a;

}

}

int main()

{

CBox box1(1);

}

也可以在构造函数时写int a=1;给他一个默认值,然后初始化时就写CBox box1;就行了,不过你写这个了就不能再写默认构造函数了。

7.默认构造函数CBox()

定义了这个,你就可以不赋初始值了。然后这个需要很长的描述就不说了,你可以看visual 2008入门经典,清华大学出版社的,304面,我就是看这个的。


8.另一种类构造函数形式

CBox(int a ) ://加冒号
m_a(a)//赋值a,不需要;并列用,
{}//函数body

9.public 和 private

为了保证类的数据安全,使用private限制,而可以通过构造一个public的函数,用该函数修改private的值,来实现接口的作用。在没有给出一个不给private的理由前,最好用private.private最好放下面。


10.友元函数,不属于类,却定在类中,成为内联函数,如果不在类中定义则不是。不属于类,至少拥有一些特殊权限。前面加friend.

class CBox

{

private:

int a;

friend double Bc(CBox box);

}

double Bc(CBox box)//不同于非友元函数,前面不需要是(inline) double CBox::

{

return box.a;

}


11.如果元素里没有指针和数组,可以使用系统的默认复制函数(其实就是你不用去写了)。

CBox box1(1);

CBox box2=box1;


12.this指针。该指针指向调用函数时使用的对象,实际上this不写也可以。(这句话难理解)

class CBox

{

public:...............

private:............

public:

int Compare(CBox boxx)

{

return this->Vol()>boxx.Vol();//比较调用这个函数的类的体积和这个函数的参数的类的体积的大小,去掉this也行的,默认Vol()是这个类的Vol()

}

};


13.析构函数

      析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。析构函数往往用来做“清理善后” 的工作(例如在建立对象时用new开辟了一片内存空间,应在退出前在析构函数中用delete释放)。

      以C++语言为例:[1]  析构函数名也应与类名相同,只是在函数名前面加一个位取反符~,例如~stud( ),以区别于构造函数。它不能带任何参数,也没有返回值(包括void类型)。只能有一个析构函数,不能重载(重载,简单说,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法)。如果用户没有编写析构函数,编译系统会自动生成一个缺省(默认)的析构函数(即使自定义了析构函数,编译器也总是会为我们合成一个析构函数,并且如果自定义了析构函数,编译器在执行时会先调用自定义的析构函数再调用合成的析构函数),它也不进行任何操作。所以许多简单的类中没有用显示的析构函数。真正实用的析构函数一般是不含有输出信息的。一般是有必要将类的声明和实现(具体方法代码)分开编写的,这也是一个良好的编程习惯。即可以在类的外面定义成员函数,而在类中只用函数的原型作声明。


14.动态内存的几个重要概念

new,delete,堆,内存泄漏,变量数组的动态内存,释放之后赋值“0”


15.输入流,cin>>,控制输出间隔setw


16.如果我们定义一个const的类对象,那么我们如果想调用这个类的某个成员函数,我们必须要在这个函数的名字后面加上一个const如int Compare()const.

函数的定义放在外面时也应该在函数体前面加上const修饰符。事实上我们可以在类中定义一个函数的const和非const两个版本。


17.类对象的数组,每个数组都将调用默认构造函数


18.类的静态数据成员。前面加static ,用 Int CBox ::a=2;初始化,常常放在构造函数里用于计数。注意该成员是共享的。其实只有我们希望静态数据成员是非0值,我们才会去初始化他们。静态数据成员常常被用来统计类被调用了几次。


19.静态函数,静态函数可以在没有创建类的时候被调用,静态函数必须使用静态的变量。通过Box1.function()或者CBox::function()来调用。也可以用来看类的对象有没有被创建或者被创建了几次。


20.类对象的指针和引用。创建p=&box1;引用p->Vol();


21.实现复制构造函数,CBox(const CBox& initB);我们直接去访问initB就避免了不断创建一个实参副本来给形参初始化的情况。在不会改变参数的值的情况下,我们习惯加一个const。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值