注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

又一个部落格

换过很多备忘录,不知道这本怎么样!

 
 
 

日志

 
 

  

2010-02-23 16:09:27|  分类: c++ |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

class-name { private data and functions public: public data and functions } object-list;
类名称       属性和方法                                                     立即实例化[可选]
默认,类的属性是私有的

实例化类
c++中实例化类 不需要new

增加一成员函数
#include <iostream>

using namespace std;

class Vehicle{
public:
    int passengers;
    int fuelcap;
    int mpg;

    int range();
};
//添加成员函数  :: 号的意思是 表示 函数 range的是属于 Vehicle类的
//在类的成员函数中使用类的成员变量不需要带上 this之类的前缀
int Vehicle::range(){
    return mpg * fuelcap;
}

int main() {
//实例化一个类是不需要new的
    Vehicle minivan;
    Vehicle sportscar;

    int range1, range2;

    minivan.passengers=7;
    minivan.fuelcap=16;
    minivan.mpg=21;

    sportscar.passengers=2;
    sportscar.fuelcap=14;
    sportscar.mpg=12;

    range1=minivan.range();
    range2=sportscar.range();

    cout<<range1<<endl;
    cout<<range2<<endl;

    return 0;
}


构造和析构 Constructors and Destructors
构造函数和析构函数没有返回类型
构造函数和析构函数和 类名称同名
看下面的例子
#include <iostream>
using namespace std;

class Myclass{
public:
    int x;
    //申明构造函数和析构函数
    Myclass();
    ~Myclass();
};

//实现构造和析构函数,没有返回值
Myclass::Myclass(){
    x=10;
}
Myclass::~Myclass(){
    cout<<"Destructing..."<<endl;
}
int main() {
    //构造函数和析构函数自动执行
    Myclass ob1;
    Myclass ob2;
    cout <<ob1.x<<endl;
    cout<<ob2.x<<endl;
    return 0;
}

带有参数的构造函数
Myclass::MyClass(int i) { x = i; }
下面两种都可以,一般使用第二种.简单一点.但是这两种方式是有不同的,以后会讲解.
MyClass ob1 = MyClass(101);
MyClass ob1(101);

假如构造函数只有一个参数 那么还有一种另类的初始化方法
Myclass ob =5;

析构函数是没有参数的,因为没有办法传一个参数给马上要销毁的对象

内联函数 Inline Functions
内联只是一个编译器请求,不是一个命令
1.一些编译器不会生成内联代码,如果函数中包含了循环,switch,或者goto
2.通常也不能递归内联函数
3.内联函数中也不允许包含静态变量

有两种方式定义内联函数
1.是通过 inline 修饰符
2.在C++ 中,在类的内部定义了函数体的函数,被默认为是内联函数。而不管你是否有inline关键字。

内联函数可以提高执行效率,内联函数通过避免被调用的开销来提高执行效率,尤其是它能够通过调用(“过程化集成”)被编译器优化。
但是内联函数其实是一种用空间来换取时间的做法,所以一般用在比较简短的函数中

通过关键字定义
class cl{
    int i;
public :
    int get_i();
    void put_i(int j);
};
inline int cl::get_i(){
    return i;
}
inline void cl::put_i(int j){
    i=j;
}

内部定义
class cl{
    int i;
public:
    int get_i(){return i;}
    void put_i(int j){i=j;}
};


对象数组
#include <iostream>
using namespace std;

class Myclass{
    int x;
public:
    void set_x(int i){x=i;}
    int get_x(){return x;}
};

int main() {
//这里创建了一个对象数组
    Myclass obs[4];
    int i;

    for(i=0;i<4;i++)
        obs[i].set_x(i);//调用对象数组中的方法
    for(i=0;i<4;i++)
        cout << "obs["<<i<<"].get_x():"<<obs[i].get_x()<<endl;
    return 0;
}

对象数组的初始化
#include <iostream>
using namespace std;

class Myclass{
    int x;
public:
    int get_x(){return x;}
    Myclass(int i){x=i;}
};

int main() {
    //只有一个参数的初始化可以怎样写
    Myclass obs[4] = {-1,-2,-3,-4};
    //假如有多个参数,就必须这样写了
    //Myclass obs[4] = {Myclass(-1),Myclass(-2),Myclass(-3),Myclass(-4)};
    int i;

    for(i=0;i<4;i++)
        cout << "obs["<<i<<"].get_x():"<<obs[i].get_x()<<endl;
    return 0;
}

通过指针访问对象,Pointers to Objects
#include <iostream>
using namespace std;

class P_example{
    int num;
public:
    void set_num(int val){num = val;}
    void show_num(){cout<<num<<endl;}
};

int main() {
    P_example ob, *p;
    ob.set_num(1);
    ob.show_num();

    p = &ob;
    //指针式通过 -> 操作符访问对象的
    p->set_num(20);
    p->show_num();
    return 0;
}

假如是一个对象数组,那么也可以用指针的递增和递减来访问数组对象
#include <iostream>
using namespace std;

class P_example{
    int num;
public:
    void set_num(int val){num = val;}
    void show_num(){cout<<num<<endl;}
};

int main() {
    P_example ob[2], *p;
    ob[0].set_num(1);
    ob[1].set_num(2);

    p = &ob[0];
    p->show_num();
    p++;
    p->show_num();
    return 0;
}
  评论这张
 
阅读(107)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017