作者水平有限,文字表述大多摘抄课本,源码部分由课本加自己改编而成,所有代码均在vs2019中编译通过

定义类操作

class Tdate
{
public:
void Set(int m, int d, int y ) { month = m ; day = d ; year = y ; }
int IsLeapYear()
{ return ( year% == && year% != )||( year% == ); }
void Print() { cout << year << "." << month << "." << day << endl ; }
private:
int month;
    int day;
     int year;
};

上面是一个时间类的定义,可以看到类中是有成员和成员函数的,成员函数可以在类里面定义也可以在类外定义

在类中定义的成员函数是当作内联函数来处理的,关于内联函数的学习链接:

在类外定义的成员函数当成普通函数处理

上面是从书上的例子,当然,按照好的编程习惯我们应该这么定义,在类里面声明,在类外定义,这样在可以不暴露实现代码的情况下提供外部接口

#ifndef Tdate_H
#define Tdate_H
//Tdate.h #include <iostream>
using std::cin;
using std::cout;
using std::endl; class Tdate

public:
        void  Set(int m, int d, int y ) ;
        int  IsLeapYear();
        void  Print();
private:
        int  month;
      int  day;   
     int  year;
};
#endif
//Tdate.cpp
#include "Tdate.h" void Tdate::Set(int m, int d, int y)
{
month = m; day = d; year = y;
} int Tdate::IsLeapYear()
{
return (year % == && year % != ) || (year % == );
} void Tdate::Print()
{
cout << year << "." << month << "." << day << endl;
}

最后我们在主函数中实现

//main.cpp
#include <iostream>
#include "Tdate.h" int main()
{
Tdate a;
a.Set(, , );
a.Print(); }

F5编译结果

成员的性质由关键字public、protected、private 决定

public         公有     公有段的成员是提供给外部的接口

protected     保护    保护段成员在该类和它的派生类中可见

private       私有     私有段成员仅在类中可见

各段中既可以包含数据成员,也可以包含成员函数

最好还是把数据放到private,成员函数接口放到public

类中定义的一些情况

比如说,类中可以定义一个指向这种类的指针

//例:
class link
{
  link * next ;
  // ……
};

也可以在第二个类中定义第一个类的数据类型

     class  X
{
//……
};
class Y
{ X dataMember ;
//……
};

但是下面一种情况是要避免的

class  X
{
//X dataMember ;这种情况是错误的,会产生无限递归
// ……
};

那么,为什么X类中可以有指向X类的指针,不能有X类的数据成员呢?

因为指针的大小是确定的!指针的大小实际上是由CPU的寻址位数决定,而不是字长。在32位cpu中指针的大小位4b,64位cpu中指针的大小为8B(从指针的意义出发,指针中存放的是目标数据的地址,在32位cpu中寻址宽度是32,64位中寻址宽度就是64)(参考https://blog.csdn.net/lhj_168/article/details/80308041)

类也可以定义无名和空类,一般不推荐,就不写了

其中,空类在编译的时候编译器会自动给它加上一个字节

class empty {};
class test
{
int a;
char b;
};
cout<<sizeof(empty);//编译器编译的时候会将每个类实例化
cout << endl;
cout << sizeof(test);

结果运行是1和8,这是因为空类编译器自动添加一个标识符,占一个字节(当里面有东西的时候这个标识符就不加了),至于8的原因,就是C++编译器会对地址进行对齐(内存大小参考:https://blog.csdn.net/qinghezhen/article/details/9100079)(对齐参考:https://my.oschina.net/u/185531/blog/2222034)至于对齐这个是编译器的原因了,作者暂时没有学编译原理,不敢妄下结论,有兴趣的读者可以自行查询

在类外使用成员或成员函数使用“ . ”和“ -> ”(指针使用的是后者)

6.1.3将会介绍this指针,由于this指针比较重要,单独开一贴讲

C++类复习及新的认识 6.1.1+6.1.2内容(适合看过一遍书的新手)的更多相关文章

  1. Java Math 类中的新功能--浮点数

    Java™语言规范第 5 版向 java.lang.Math和 java.lang.StrictMath添加了 10 种新方法,Java 6 又添加了 10 种.这个共两部分的系列文章的 第 1 部分 ...

  2. AJPFX关于File类复习

    file是一个路径,分为相对路径(eclipse)和绝对路径:1.构造方法有:File(String pathname ),File(String parent ,String child),File ...

  3. Java异常类复习总结

    个人理解先行: 异常类是当在程序出现问题时抛出的一个警告.提示你程序设计或者代码有存在错误的地方. 异常类和Error都继承自Throwable, Throwable继承自Object类. Runti ...

  4. JAVA基础部分复习(一、8中基础类型,以及String相关内容)

    以下是关于java中8种基本类型的介绍说明: package cn.review.day01; /** * java基础复习,8种数据类型 * (byte,short,long,int,double, ...

  5. 新的框架,新的感觉ASP.NET MVC 分享一个简单快速适合新手的框架

    在ASP.NET世界中摸爬滚打好几年,用过了各种框架,在最初的ASP.NET web from 到现在的MVC 在起初的经典三层,到现在的MVC  IOC  注入 . 突然发现,有些时候真不是跟风用一 ...

  6. QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)

    因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了.因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windo ...

  7. 我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信

    1.请您在桌面下.点击手菜单键-全局搜索,输入网络助手,点击流量排行,点击批量联网控制,查看该软件下(不能上网的应用)wifi和流量2G/3G下方的选项是否都勾选的.如果没有勾选,请您勾选. 2:仍然 ...

  8. File类_常见的方法(获取目录中指定规则的内容)_listFiles

    import java.io.File; public class ListDemo { public static void main(String[] args) { ListDemo(); } ...

  9. File类_常见的方法(获取目录中指定规则的内容)

    首先定义过滤器 import java.io.File; import java.io.FilenameFilter; public class FileByJava implements Filen ...

随机推荐

  1. Redis过期key淘汰策略

    Redis采用惰性+定期的key淘汰策略 1. Redis配置项hz定义了serverCron任务的执行周期,默认为10,即CPU空闲时每秒执行10次; 2. 每次过期key清理的时间不超过CPU时间 ...

  2. vmware增加新硬盘无需重启生效

    echo "scsi add-single-device 2 0 2 0" > /proc/scsi/scsi # echo "scsi add-single-de ...

  3. 《英诗金库》I-46:Full Fathom Five, by W. Shakespeare

    作品基本信息 作品名称:A Sea Dirge(海的挽歌) 作者:William Shakespeare(威廉·莎士比亚) 出版年代:1612 编注:此诗选自<暴风雨>第一幕第二场.标题& ...

  4. 《和莎莫的 500 天》中为什么 Summer 最终没有和 Tom 在一起?

    好的电影总是需要仔细赏味几次,每次也都会有不同的收获.就像我钟爱的[500 days of summer]. 彪悍的大胡子导演MarcWebb实在是太有趣,把自己的亲身经历搬上大荧幕,因为" ...

  5. rpmbuild 实践

    安装 rpmbuild 1 # yum install -y rpm-build 查看 rpmbuild 相关的宏和参数 12345678 # rpmbuild --showrc | grep --c ...

  6. 使用C#开发pdf阅读器初探(基于WPF,没有使用开源库)

    前言 pdf是最流行的版式格式文件标准,已成为国际标准.pdf相关的开源软件非常多,也基本能满足日常需要了.相关商业软件更是林林总总,几乎应有尽有!似乎没必要自己再独立自主开发!但,本人基于以下考虑, ...

  7. string类中getline函数的应用

    */ * Copyright (c) 2016,烟台大学计算机与控制工程学院 * All rights reserved. * 文件名:text.cpp * 作者:常轩 * 微信公众号:Worldhe ...

  8. 达拉草201771010105《面向对象程序设计(java)》第十一周学习总结

    达拉草201771010105<面向对象程序设计(java)>第十一周学习总结 实验十一   集合 实验时间 2018-11-8 第一部分:理论知识 1.集合(Collection或称为容 ...

  9. 利用动态资源分配优化Spark应用资源利用率

    背景 在某地市开展项目的时候,发现数据采集,数据探索,预处理,数据统计,训练预测都需要很多资源,现场资源不够用. 目前该项目的资源3台旧的服务器,每台的资源 内存为128G,cores 为24 (co ...

  10. 攻防世界Mobile6 app1 XCTF详解

    XCTF_app1 先安装看看 点击芝麻开门之后会弹出“年轻人不要耍小聪明噢” 这大概就能看懂是点击之后进行判断,那就直接去看JEB,看看判断条件是什么 V1是输入的字符串,V2获取包信息(百度的), ...