C++类复习及新的认识 6.1.1+6.1.2内容(适合看过一遍书的新手)
作者水平有限,文字表述大多摘抄课本,源码部分由课本加自己改编而成,所有代码均在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内容(适合看过一遍书的新手)的更多相关文章
- Java Math 类中的新功能--浮点数
Java™语言规范第 5 版向 java.lang.Math和 java.lang.StrictMath添加了 10 种新方法,Java 6 又添加了 10 种.这个共两部分的系列文章的 第 1 部分 ...
- AJPFX关于File类复习
file是一个路径,分为相对路径(eclipse)和绝对路径:1.构造方法有:File(String pathname ),File(String parent ,String child),File ...
- Java异常类复习总结
个人理解先行: 异常类是当在程序出现问题时抛出的一个警告.提示你程序设计或者代码有存在错误的地方. 异常类和Error都继承自Throwable, Throwable继承自Object类. Runti ...
- JAVA基础部分复习(一、8中基础类型,以及String相关内容)
以下是关于java中8种基本类型的介绍说明: package cn.review.day01; /** * java基础复习,8种数据类型 * (byte,short,long,int,double, ...
- 新的框架,新的感觉ASP.NET MVC 分享一个简单快速适合新手的框架
在ASP.NET世界中摸爬滚打好几年,用过了各种框架,在最初的ASP.NET web from 到现在的MVC 在起初的经典三层,到现在的MVC IOC 注入 . 突然发现,有些时候真不是跟风用一 ...
- QWidget类中默认是忽略inputMethodEvent事件(要获取输入的内容就必须使用这个事件)
因为项目的需要以及主管的要求,准备将工程移植到Qt中,这样就可以比较容易的实现跨平台了.因为之前工程是在windows下开发的,第一个平台又是mobile所以除了底层框架之外其他的都是使用的windo ...
- 我新买的红米手机,新浪和360浏览器都能进,也能看电视,就是不能上手机QQ和微信
1.请您在桌面下.点击手菜单键-全局搜索,输入网络助手,点击流量排行,点击批量联网控制,查看该软件下(不能上网的应用)wifi和流量2G/3G下方的选项是否都勾选的.如果没有勾选,请您勾选. 2:仍然 ...
- File类_常见的方法(获取目录中指定规则的内容)_listFiles
import java.io.File; public class ListDemo { public static void main(String[] args) { ListDemo(); } ...
- File类_常见的方法(获取目录中指定规则的内容)
首先定义过滤器 import java.io.File; import java.io.FilenameFilter; public class FileByJava implements Filen ...
随机推荐
- JS去重函数的扩展应用
数据: 账单id[1,1,1,1,2,2,2,3,3,3,3,3,3,3], 相对于账单id的金额[100,120,110,150,200,180,220,115,150,120,180,220,14 ...
- <JZOJ5906>传送门
emmm dpdpdp然鹅我考场上并想不到 还是凉凉 #include<cstdio> #include<cmath> #include<iostream> #in ...
- js 创建对象的多种方式
参考: javascript 高级程序设计第三版 工厂模式 12345678910 function (name) { var obj = new Object() obj.name = name o ...
- IDEA工具java.io.IOException: Could not find resource SqlMapConfig.xml
IDEA工具java.io.IOException: Could not find resource SqlMapConfig.xml 解决办法: 1.删掉pom.xml文件的这行代码 <pac ...
- failed to load main-class manifest attribute(运行jar包出错)
原因描述:MANIFEST.MF文件中的Main-Class配置不正确或格式不正确 检查方式:以WinRarR的方式打开jar包,如图所示, 点击进入箭头所指的META-INF文件夹 将MAN ...
- Hibernate入门之主键生成策略详解
前言 上一节我们讲解了Hibernate命名策略,从本节我们开始陆续讲解属性.关系等映射,本节我们来讲讲主键的生成策略. 主键生成策略 JPA规范支持4种不同的主键生成策略(AUTO.IDENTITY ...
- 下载cv2时下载失败或下载成功却无法使用怎么办
最近我也在安装cv2的时候遇到了奇怪的问题,导致在安装cv2的时候无法使用.我在网上查了各种资料,虽然都对的,但都不太全面.本文就把安装cv2时可能遇到的各种奇怪的问题的解决方案做一个总结,供大家参考 ...
- PHPRAP v1.0.6 发布,修复因php7.1版本遗弃mcrypt扩展造成安装失败的BUG
PHPRAP,是一个PHP轻量级开源API接口文档管理系统,致力于减少前后端沟通成本,提高团队协作开发效率,打造PHP版的RAP. 更新记录 [修复]修复因php7.1版本遗弃mcrypt扩展造成安装 ...
- FC及BFC
1.什么是FC 2.BFC块级格式化上下文(Block formatting context) Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的.元素的类 ...
- 从0到1使用MyBatis
MyBatis作为最流行的数据中间层,成为企业Java软件开发中非常重要的软件. 一.基本配置 1.首先需要导入Maven <dependency> <groupId>org. ...