一 定义类与对象
类是人为定义的一种数据类型,c++中,属性用数据的储存结构实现,称为类的数据成员;方法用函数实现,称为成员函数。
class是定义类的关键字且以分号结束类的定义语句。
public 声明公有成员
protect 声明保护成员
private 声明私有成员
class与struct的区别:class若不特别声明,则数据默认为私有,而struct默认为共有。
简单类:
class Date
{public:
void PrintDate()
Void satedate()
private:
int year,month,day
};
Date类中一共有三个私有数据成员 year month day。
成员函数可以定义在类的内部,也可以在类的外部用作用域区分符::来说明
如Date类的成员函数定义在类外
void Date::SetDate(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
成员函数有两个作用:一是操作数据成员,二是用于协同不同的对象操作。
访问对象成员:
运算符“.”和"->"用于访问对象成员。
如:
#include<iostream>
using namespace std;
class Tclass
{ public:
int x,y;
void print()
{ cout<<x<<","<<y;}
};
int main()
{Tclass test;
test.x=100;
test.y=200;
test.print();
}
this指针
---每个成员函数都有一个指针形参,它的名字是固定的,称为this指针,this指针是隐式的。(构造函数比较特殊,没有这个隐含 this形参)
---编译器会对成员函数进行处理,在对象调用成员函数时,对象地址作实参传递给成员函数的第一个形参this指针。
---this指针是成员函数隐含指针形参,是编译器自己处理的,我们不能在成员函数的形参中添加this指针的参数定义,也不能在调用时显示传递对象的地址给this指针。
默认成员函数
构造函数没有返回值,可以有参数,没有参数的构造函数被认为是缺省构造函数,但缺省构造函数只允许有一个
与类同名,可以有多个构造函数 ,可以重载, 没有隐含的this形参
作用是将对象初始化,创造出对象时系统自动调用构造函数
析构函数
与类同名,并且与构造函数工作性质相反,故有~ 标识析构函数
当对象生命周期结束(即出了类的作用域),系统自动调用析构函数
不支持重载,
复制构造函数是一种特殊的构造函数,它在创建对象时,是使用同一类中之前创建的对象来初始化新创建的对象。如果在类中没有定义肤质构造函数,编译器会自行定义一个。复制构造函数要求有一个类类型的引用参数。
类名::类名(const 类名&引用名,…);
例如:
class A
{ public:
A(int);
A(const A&,int=1);
//…
};
//…
A a(1);
A b(a,0);
A c=b;
类的其他成员常成员
在类中,定义类的常成员用const约束,常成员函数是指成员函数this指针被约束为指向常量的常指针,在函数体内不能修改数据成员的值。
C++类的静态成员
使用 static 关键字来把类成员定义为静态的。当声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。
Static静态数据成员:封装性、继承性、多态性。
友元函数:友元函数可以访问类的所有成员,包括私有成员,
友元函数是非对称的。
友元函数定义时将关键词friend冠于一个函数原型或类名之前,则成为该函数或类的友元
友元函数不是类的成员,调用私有成员时也有差别
如:
A Aobj;
FriendFun(&Aobj,5);
Aobj。MemberFun(5);
友元函数必须在参数表中显示的知名要访问的对象Aobj,而成员函数则在他的对象Aobj上操作。
学习心得:类与对象的学习相较于以前的知识学习方法不同,也更加有难度,联系性更强,个人感觉学习起来比较费劲,上课有时会跟不上,自己也会到图书馆借阅相应的书籍。同时学习和应用类与对象的知识也更加需要仔细和耐心,以后会慢慢培养自己自信认真的习惯。