码迷,mamicode.com
首页 > 其他好文 > 详细

类与对象

时间:2016-07-20 13:48:26      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:extern “c” 类 对象

1、C++语言是基于面向对象的,所以尤其四大特性:

        抽象、封装、继承、多态。、

        抽象:对客观世界,现实实体的一类定义,找到共性;

        封装:将数据及对数据上的操作捆绑起来;

        继承:子子孙孙无穷匮也;

        多态:主要体现在继承,同一事物的不同表现形式。

2、C++中的类:

        与C语言中的结构体类似:

struct STU{
    char name[15];
    char id[9];
    double score;
};

        以上就可以体现封装,将不同的数据类型封装起来,只是没有方法而已;

        新的数据类型为:struct STU  a(结构体变量)。

        通过类比,可以知道,在C++中通过class定义新的数据类型,

class Test{
public:
    void setData(int x){
        data = x;
    }
private:  
    int data;
};

        通过类将其封装起来,新的数据类型为Test  a(对象)。

        只不过在C语言中叫做结构体,在C++中叫就做类,是一种对事物共性的抽象,

        比C多了对数据上的操作。

3、对象:

        在C中将结构体定义的叫做,结构体变量,在C++中将类定义的叫做,对象。

        创建对象两种方式:静态创建:Test a; 创建后将对象压栈;

                                    动态创建:Test *a = new Test;  其申请的空间在堆上,必须通过delete释放。

4、访问限定符:

        public:公有    protected: 保护    private:私有;

        C++中,通过对象只能访问一个类的public,   对protected和private修饰的通过对象不能调用。

5、深入理解类与对象:

        当我们定义一个类的时候,相当于规划了一幅蓝图,没有实例化时,是没有空间的,通过类名.data是错误的。

        实例化:    Test t1();          这个不会实例化对象t1,因为这是函数声明,t1是函数名称,无参,返回值为Test类型;

                         Test t2;          对       无参的初始化

                         Test t3(10);    对       含有一个参数的初始化


6、成员方法的实现:

        可以在类内直接定义;

        也可以在类内声明,类外定义,加上作用域限定符,

int Test::getData(){
   return data; 
}

        加上::这个之后表明getData是Test的成员函数。

7、C++重载

        C语言为什么不能重载呢?  从汇编层面可以知道,

void fun();                          
int fun(int a);
double fun(double a, double b)

        以上三个函数在C角度看汇编都是fun;名字都相同;

        从C++的角度看,其汇编层面的函数名字为:fun funi fundd,是不一样的,所以C++有函数的重载。

        重载:函数名字相同,只与参数列表有关,与返回值无关。

        在C++中对重载函数使用extern "C"就可以理解了,

        extern "C":将当前函数(C++写的),当做C编译,而C编译只看函数名称,所以多个重载函数只能出现一次extern “C”!

        要是出现两个,就会造成函数名相同,错误。


类与对象

标签:extern “c” 类 对象

原文地址:http://11596096.blog.51cto.com/11586096/1827931

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!