小小许的 C++学习之路(一):类和对象

类的定义

class 类名
{
成员和方法的定义
}

方法的定义

方法的定义放在类体内;方法的实现可以放在类体内,也可以放在类之外,如果方法的实现放在类体之外,需要使用类名和域限定符 :: 来标记方法属于哪一个类
如下:bool 类名::func()

如果在方法的最后使用了const关键字,表示用户不能在该方法中修改类的数据成员
如下:bool 类名::func() const
如果类中包含有指针成员,在const方法中不可以重新为指针赋值,但是可以修改指针所指向地址中的数据,如下:

char *GetPassword()const //假设m_pData为类中的一个字符指针成员
{
	m_pData = (char *)m_Username; //错误的代码,不能在const方法中修改成员数据
	m_pData[0] = 'K';   //正确的代码,可以修改指针指向的句
	return (char*)m_Password;
}

成员的定义

数据成员不能在类定义的时候直接初始化

类成员、方法的作用域

关键字描述
public公有成员,可以在成员的任何地方进行访问
protected保护成员,该成员只能在类和类的子类中访问
private私有成员,只能在类中访问,子类和程序的其他地方都不能访问

如果在定义类时,没有指定访问限定符,则默认为private

类的对象

除静态成员外,类成员的访问都是通过对象实现的,在定义类的对象时,为该对象分配存储空间,如CUser user

类对象也可以定义成指针,通过new运算符来为指针分配内存,结束后需要通过delete释放为指针分配的内存
如:

CUser *pUser;
pUser = new CUser();
delete pUser;

加了const关键字的为常量指针,如:

const CUser *pUser = new CUser;  //定义一个常量指针对象
//pUser只能访问CUser中的const方法
delete (CUser *)pUser;  //释放常量指针

构造函数和析构函数

每个类都有构造函数和析构函数,构造函数在定义对象时被调用<如定义对象CUser user;就调用了CUser 的默认构造函数>;析构函数在对象释放时被调用。

构造函数

构造函数是一个与类同名的方法,没有返回值,可以没有或有多个参数;如果构造函数没有参数,则称为默认构造函数
数据成员的初始化需要放在构造函数中去进行,不能直接在定义时对数据成员进行赋值;类的构造函数通过使用 **‘:’**运算符初始化成员,如下:

class CBook                 //定义一个类CBook
{
public:
char m_BookName[128];
const unsigned int m_Price;  //定义数据成员
int m_ChapterNum;            //定义常量数据成员
CBook()                     //定义默认的构造函数
:m_Price(32),m_Chapter(15)  //对数据成员进行初始化
{
strcpy(m_BookName, "大学英语");
}
};

析构函数

析构函数在对象超出作用范围或使用delete运算符释放对象时被调用**,用于释放对象所占用的空间;
析构函数没有返回值,也没有参数,以~开头

内联成员函数

调用内联成员函数时,程序会在编译时在内联成员函数直接插入函数代码。
内联成员函数的几种定义方法:
1:在类定义中直接实现函数,则会被认为内联成员函数
2:函数定义时使用inline关键字,
3:函数实现时使用inline关键字

静态成员和函数

静态成员

静态类成员是在类成员定义前使用static关键字进行标识。静态数据成员被所有的类对象共享。
静态类成员在类体内进行定义,在类体外部对静态数据成员进行初始化。

Class CBook
{
public:
static unsigned int m_Price;  //定义一个静态数据成员
};

unsigned int CBook::m_Price = 10;  //初始化静态数据成员

静态数据成员还要注意以下几点:
1)静态数据成员可以是当前类的类型,而其他数据成员只能是当前类的指针或引用类型。

class CBook
{
public :
static unsigned int m_Price;
CBook m_Book;   //非法定义,不允许在该类中定义所属类的对象
static CBook m_VCBook;  //正确,静态数据成员允许定义类的所属类对象,如何初始化呢?????
CBook *m_pBook;  //正确,允许定义类的所属类的指针类型对象
};

2)静态数据成员可以作为成员函数的默认参数

静态成员函数

静态成员函数只能访问类的静态数据成员;
静态成员函数不能使用const关键字;如:static void OutputInfo() const非法

在类定义中使用static静态成员函数,如果函数的实现位于类体之外,则不能在实现时再标识 static关键字。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值