一、综述

类是我们自己定义的数据类型(新类型)

设计类时要考虑的角度:

(1)站在设计和实现者的角度来考虑

(2)站在使用者的角度来考虑

(3)父类,子类

二、类基础

(1)一个类就是一个用户自己定义的数据类型,把类可以想象为一个命名空间,包着一堆东西(成员函数,成员变量)。

(2)一个类的构成:成员变量,成员函数(有许多特殊的成员函数)。

(3)我们访问类成员时,我们就用对象名.成员名来访问成员

如果是指向对象的指针,我们就用指针名->成员名来访问成员。

class student
{
int number;
char name[];
} student someone; // 定义类的对象
someone.number = ;
student *someone1 = &someone;
someone->number = ;
cout << someone1->number << endl;

(4)public成员提供类的接口,暴露给外接,供外界调用;private成员提供各种实现类的细节方法,但不暴露给使用者,外界无法访问这些成员。

(5)struct是成员默认为public的class;      struct A{….}

(5)class是成员默认为private(私有)class A{….}

三、成员函数

class Time
{
public:
int Hour; // 小时
int Minute; // 分钟
int Second; // 秒钟 void initTime(int tmpHour, int tmpMinute ,int tmpSecond)
{
Hour = tmpHour;
Minute = tmpMinute;
Second = tmpSecond;
}
} int main()
{
Time MyTime; // 类对象
MyTime .initTime(MyTime,,,);
cout << MyTime.Hour << endl;
cout << MyTime.Minute << endl;
cout << MyTime.Second << endl;
return ;
}

当做工程来写

//time.h

#ifndef __MYTIME__
#define __MYTINE__ class Time
{
public:
int Hour; // 小时
int Minute; // 分钟
int Second; // 秒钟 void initTime(int tmpHour, int tmpMinute ,int tmpSecond);
}
#endif
//time.cpp

#include “Tiem.h”

// 成员函数的实现
// 其中::称为作用于运算符,表示initTime这个函数属于Time类
void Time::initTime(int tmpHour, int tmpMinute ,int tmpSecond)
{
Hour = tmpHour; // 成员函数中可以直接使用成员变量名
Minute = tmpMinute;
Second = tmpSecond;
}

入口函数文件

#include “Time.h”

int main()
{
Time MyTime; // 类对象
MyTime .initTime(MyTime,,,);
cout << MyTime.Hour << endl;
cout << MyTime.Minute << endl;
cout << MyTime.Second << endl; return ;
}

四、对象的拷贝

对象本身是可以拷贝的

默认情况下,类对象的拷贝,是每个成员变量的逐个拷贝。

如果在类中定义适当的赋值运算符就能够控制对象的拷贝行为。

Time myTime;
myTime.Hour = ;
myTime.Minute = ;
myTime.Second = ; Time myTime2 = myTime; // 定义新对象并初始化
Time myTime3(myTime);
Time myTime4 {myTime};
Time myTime5 = {myTime};
myTime5.Hour = ;

五、私有成员

class Time
{
private:
int Millsecond; // 毫秒
public:
int Hour; // 小时
int Minute; // 分钟
int Second; // 秒钟 void initTime(int tmpHour, int tmpMinute ,int tmpSecond)
{
Hour = tmpHour;
Minute = tmpMinute;
Second = tmpSecond;
} void initMillTime(int mls)
{
Millsecond = mls; // 成员函数可以访问成员变量,不管成员是否私有
}
} Time myTime;
//myTime. Millsecond = 1000; // 出错,无法访问
myTime.initMillTime(); // 私有成员变量的值可以通过公有的成员变量来获取与设置

C++基础知识:成员函数、对象拷贝、私有成员的更多相关文章

  1. C++之在类内部访问对象的私有成员

    一.引言 今天看项目里的一段代码发现,竟然可以再类的成员函数中访问该类的对象的私有成员.感觉不可思议. 自己写的实例代码: #include <iostream> using namesp ...

  2. 类1(this指针/const成员函数/类作用域/外部成员函数/返回this对象的函数)

    假设我们要设计一个包含以下操作的 Sales_data 类: 1.一个 isbn 成员函数,用于返回对象的 book_no 成员变量 2.一个 combine 成员函数,用于将一个 Sales_dat ...

  3. 通过指针访问C++对象的私有成员

    C++对象的私有成员是禁止类外的访问的.但是我们仍然可以通过指针访问C++对象的私有成员. #include <iostream> using namespace std; class A ...

  4. python基础知识13---函数对象、函数嵌套、名称空间与作用域、装饰器

    阅读目录 一 函数对象 二 函数嵌套 三 名称空间与作用域 四 闭包函数 五 装饰器 六 练习题 一 函数对象 1 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 ...

  5. php面试笔记(5)-php基础知识-自定义函数及内部函数考点

    本文是根据慕课网Jason老师的课程进行的PHP面试知识点总结和升华,如有侵权请联系我进行删除,email:guoyugygy@163.com 在面试中,考官往往喜欢基础扎实的面试者,而函数相关的考点 ...

  6. [C/C++基础知识] main函数的参数argc和argv

    该篇文章主要是关于C++\C语言最基础的main函数的参数知识,是学习C++或C语言都必备的知识点.不知道你是否知道该知识?希望对大家有所帮助.一.main()函数参数通常我们在写主函数时都是void ...

  7. Python基础知识:函数

    1.定义函数和调用函数 #定义函数def def greet_user(username): '''简单的问候语''' print('Hello,%s!'%username) greet_user(' ...

  8. Js基础知识7-Es6新增对象Map和set数据结构

    前言 JavaScript中对象的本质是键值对的集合,ES5中的数据结构,主要是用Array和Object,但是键只能是字符串.为了弥补这种缺憾,ES6带来了一种新的数据结构Map. Map也是键值对 ...

  9. Java基础知识3-类和对象(1)

    面向过程和面向对象的区别 面向过程(结构化程序设计) 实际上是一个面向操作过程,首先设计一系列过程(算法)来求解问题(操作数据),然后再考虑存储数据的方式(组织数据).即程序=算法\+数据结构.对应典 ...

  10. ES6基础知识(Promise 对象)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

随机推荐

  1. Golang之方法(自定义类型,struct)

    方法的使用,请看本天师的代码 //Golang的方法定义 //Golang中的方法是作用在特定类型的变量上,因此自定义类型,都可以有方法,不仅仅是struct //定义:func (recevier ...

  2. loadrunner--步长(Pacing)的设置及作用

    Pacing时间的设置需要根据使用您系统的用户的行为来决定. 如果您那边的用户在您的系统上做完一套操作后不会做下一套,则可能不需使用Pacing. 如果您那边用户在系统上需要不断地做同样的操作,比如他 ...

  3. Shadow Map 实现极其细节

    这里不介绍算法原理,只说说在实现过程中遇到的问题,以及背后的原因.开发环境:opengl 2.0  glsl 1.0. 第一个问题:产生深度纹理. 在opengl中每一次离屏渲染需要向opengl提供 ...

  4. 如何用Python实现常见机器学习算法-3

    三.BP神经网络 1.神经网络模型 首先介绍三层神经网络,如下图 输入层(input layer)有三个units(为补上的bias,通常设为1) 表示第j层的第i个激励,也称为单元unit 为第j层 ...

  5. Appium自动化测试-iOS

    Appium的哲学 我们相信,对原生应用的自动化测试,应当不必要包含其他的SDK组件或者特别编译您的App,并且应当可以选择任何您喜欢的测试方法,框架和工具.基于这些出发点我们开发了Appium.现在 ...

  6. UVa 1599 Ideal Path (两次BFS)

    题意:给出n个点,m条边的无向图,每条边有一种颜色,求从结点1到结点n颜色字典序最小的最短路径. 析:首先这是一个最短路径问题,应该是BFS,因为要保证是路径最短,还要考虑字典序,感觉挺麻烦的,并不好 ...

  7. Scala程序编译运行

    1.编译 Scala演示代码如下: <pre name="code" class="plain">/** * @author Administrat ...

  8. nginxのerror_logはformat指定できない.

    備忘録です. http://toshitanian.hatenablog.com/entry/2013/10/25/023838 2013-10-25 nginxのerror_logはformat指定 ...

  9. Java反射API研究(1)——注解Annotation

    注解在表面上的意思,只是标记一下这一部分,最好的注解就是代码自身.而在java上,由于注解的特殊性,可以通过反射API获取,这种特性使得注解被广泛应用于各大框架,用于配置内容,代替xml文件配置. 要 ...

  10. Tips and Examples Using FNDLOAD (DOC ID 735338.1)

    In this Document Goal Solution Some Tips About FNDLOAD Some sample examples Diagnostics & Utilit ...