C++中的类和对象

以下为本人在大一时阅读《C++ Primer Plus》中关于类和对象的章节所做的笔记
 

类和对象

类和对象:
Pascal case(Pascal风格):
类的名字中每个随后的单词其首字母为大写
例:class GradeBook

骆驼风格:函数名以小写字母开头
例:void displayMessage

将函数声明为const:
告诉编译器这个函数不应该修改调用它的对象
const放的位置:在参数之后,函数内容之前
例:void displayMessage() const {…}

函数的头部(function header):
函数的返回类型、名字、参数类型
例:int f(int a)

访问说明符(access specifier):
public、private、protected
public:该access specifier之后的函数可以被程序中的其他函数,以及其他类的成员函数所调用
private:private之后到下一个成员访问说明符之前声明的变量或函数,只可以被声明它们的类的成员函数(即友元)所访问。(注意类成员默认的成员访问符是private,即第一个成员访问说明符之前的所有成员都是私有的)

声明于类的定义内,但在所有类的成员函数的定义体之外的变量,叫做数据成员。类的所有成员函数都可以操作类定义中出现的任何数据成员。

string a;
cin>>a; //读取到空格就结束了
getline( cin, a ); //读取直到换行符为止

设置函数:为变量设置内容,有时候称为更换器(mutator),函数名常以set开头,如:setCourseName
获取函数:获取变量数据,有时候成为访问器(accessor),函数名常以get开头,如:getCourseName

构造函数(constructor):
定义时必须与类同名
使用explicit声明单形参构造函数
构造函数不能声明为const,因为对象的初始化修改了对象
不能返回值,不能指定返回类型(void也不行)
通常情况下,构造函数声明为public
对于每个创建的对象,C++自动调用构造函数,保证在程序使用对象前,正确地初始化
构造函数的调用发生在对象创建时

class Gradebook
{
        public:
                //以下为构造函数
                explicit Gradebook (string name) //形参列表
                : courseName(name) //成员初始化项
                {
                        //构造函数的体
                }
        private:
                string courseName;
};
int main ()
{
        Gradebook gradeBook1("C++"); 
        //初始化了gradeBook1对象的courseName
        return 0; 
}

成员初始化列表的执行在构造函数的体执行之前进行,但也可以在构造函数的体内执行初始化(效率较低)

默认构造函数:
任何不接受实参的构造函数称为默认构造函数
在这里插入图片描述
在这里插入图片描述
头文件(header file):
驱动程序(driver program):使用一个包含了main函数的独立的源代码文件来测试有关的类
编译器仅创建类的成员函数的一份副本,该类所有的对象共享它。
每个对象需要它自己的一份类的数据成员的副本。
成员函数的代码是不可更改的
一个对象的大小依赖于存储类的数据成员所需的内存大小
#include “GradeBook.h"这一行会指示C++预处理器在程序被编译前用GradeBook.h的内容的副本替换这条指令,所以这个文件以及包含了GradeBook类定义,且编译器能够确定如何创建Gradebook对象并检查它们的成员函数是否被正确调用
当遇到带”“号的头文件,预处理器会在该文件所在的文件夹寻找该头文件,若找不到则会继续在标准库头文件中搜索;若遇到带<>号的头文件,预处理器会认为这个头文件是标准库的一部分,不会到正被预处理的这个程序所在的文件夹中去查找
在这里插入图片描述
接口与实现的分离:
类的接口(interface):由类的public成员函数组成(也称为类的公共服务)
在这里插入图片描述
GradeBook.h:使用函数原型定义类的接口(只声明函数原型,没有定义成员函数的具体内容)
在这里插入图片描述
GradeBook.cpp:在独立的源代码文件中定义成员函数
请注意,关键字const必须出现在成员函数getCourseName和displayMessage的函数原型和函数定义中
在函数头部中,每个成员函数名之前都添加了类名和符号”::",该符号是作用域分辨运算符(scope resolution operator)
在这里插入图片描述
没有指定对象的函数不可以访问GradeBook的private数据,或者调用类的成员函数,所以编译器将不能编译这些函数。
GradeBook.cpp:在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
substr的使用:

string a="abcdefg";
a=a.substr(0,3);
cout<<a<<endl; 

输出:abc
s.substr(a,b)即将字符串s进行切割,从第a位开始取b个字符,返回切割得到的新的字符串

cerr函数:
用法与cout差不多,常用语程序错误信息,到目前将它理解为跟cout一样打印信息就行,具体与cout的差距:https://blog.csdn.net/garfield2005/article/details/7639833

分行打印较长的字符串:

cout<<"I'm "
"dj"<<endl;

输出:I’m dj

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值