C++类、对象、模板与STL

类:一个特殊的概念,再C++语言中是一个新的数据类型,可以是对同一类型事物进行抽象处理,也可以是一个层次结构中的不同层次节点。

类的声明与定义:

类中的成员函数的定义方法:1.将类的成员函数都定义在类体内;

                                               2.将类的成员函数的实现放在类体外,但如果类成员函数定义在类体外,需要用到域运算符“::”;(当多个源文件都引用该头文件时,会报错“重复定义”)

                                               3.可以将函数的声明与定义放在不同文件里,在“.h”头文件中放函数的声明,在“.cpp”文件中放函数的实现。

类的数据成员初始化:通过构造函数

对象的构造:1.无参构造:a.栈空间构造,不需要加括号,加括号报错:(request for member ‘  ’ in ‘  ’, which is of non-class type ‘  ’);b.堆空间构造,定义对象指针,动态分配空间,需要加括号

Person p1;
Person *p2=new Person();

对象的成员引用:1.成员引用方式," . ";

                             2.对象指针方式, " -> ";

类成员的属性:public、private(默认状态类成员)、protected。public对外可见;private只对内可见;protected对内和派生类可见。作用范围:直到下一次出现另一个关键字为止。

内联成员函数:inline

静态类成员:关键字static,静态数据成员,静态成员函数。如果将类成员定义为静态类成员,则允许使用类名直接访问。既可以通过对象访问,也可通过类名访问(类名和域运算符“∷”)。在一个类中,静态数据成员是被所有的类对象所共享的,无论定义多少个类对象,类的静态数据成员只有一份。非静态成员函数有this指针,静态成员函数并不属于某一对象,它与任何对象都无关,静态成员函数没有this指针,由此决定了静态成员函数不能访问本类中的非静态成员。

隐藏的this指针:通过类中隐藏的this指针,对象共享类中的成员函数。指向被调用对象的指针,用户可以显式地使用this指针访问数据成员。

嵌套类:在一个类中定义另一个类。外围类不能访问嵌套类的私有成员。内部的嵌套类只允许外围类使用,在其他类域或则作用域中是不可见的,但是可以通过外围类的作为限定符“::”来定义嵌套类对象。

局部类:类的定义放置在函数中。

友元:友元函数与友元类。友元类:当用户希望另一个类能够访问当前类的私有成员时,可在当前类中将另一个类作为友元类【friend class 类名】,这样在另一个类中就能访问当前类的私有成员。

命名空间:命名空间可消除在一个应用程序中多个文件中可能存在同名的全局对象。作用域限定符“ :: ”

继承:就是用已有的数据类型创建新的数据类型,并保留已有数据类型的特点,以旧类为基础创建新类,新类包含了旧类的数据成员和成员函数。【class 派生类名标识符:[继承方式] 基类名标识符】

继承方式:公有型(public)、保护型(protected)和私有型(private)。公有型派生表示

构造函数访问顺序:

子类显示调用父类构造函数:

子类隐藏父类的成员函数:

重载运算符:运算符实际上一个函数,所以运算符的重载实际上时函数的重载;类对象的加法运算有两种方法:通过成员函数、重载操作符

模板:分为函数模板与类模板。编译器不能为其生成可执行代码。

模板函数:函数模板生成实际可执行的函数成为模板函数。函数模板是一个“框架”。模板函数是函数模板中的类型参数实例化后生成的函数。

STL:Standard Template Library,为标准化组件提供类模板进行泛型编程。特点:通用性好、效率高、数据结构简单、安全机制。是一些容器的集合,这些容器在算法库的支持下使程序开发变得更加简单和高效。

template<class type>
type sum(type x,type y)
{
    return x+y;
}

 

其他概念:对象名数组、对象名指针、引用形式的对象名、构造函数、复制构造函数、析构函数、“ :”运算符(表示基类和派生类之间的继承关系)、

 

Tips:1.类比结构体增加了操作数据的行为,也就是函数;

        2.另一个类的对象可以作为该类的成员,但是自身类的对象不能作为该类的成员,但是自身类的指针或引用又是可以作为该类的成员。

        3.定义类结构体和定义结构体时花括号后要有分号;

        4.存放类的头文件和实现文件最好和类名相同。

        5.类的数据成员不可以在类的声明中初始化

       6.构造函数主要在对象创建时,给对象中一个成员数据赋值,主要目的就是初始化对象。析构函数的功能是用来释放一个对象,在对象删除前,用它来做一些清理工作,它与构造函数的功能正好相反。

       7.构造函数和析构函数不能使用return语句返回值,不用加上关键字void.

       8.在定义静态数据成员时,通常需要在类体外部对静态数据成员进行初始化;

       9.如果某一个对象修改了静态数据成员,其他对象的静态数据成员也将改变;

      10.静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或应用类型;

      11.成员函数指定默认参数,默认值可以是类的静态数据成员,普通的数据成员则不能作为成员函数的默认参数;

      12.类的静态成员函数只能访问类的静态数据成员,而不能访问普通的数据成员;

      13.每个对象都有自己的数据成员,不过成员函数却是每个对象共享的。

      14.在类模板中可以定义静态的数据成员,类模板中的每个实例都有自己的静态数据成员,而不是所有的类模板实例共享数据成员。同一类型的模板实例,其静态数据成员都是共享的。

 

       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值