1、类(class)

​ 描述现实世界中的事物,用C++进行编程的时候,通常是将现实世界中的事物用类来进行描述。不是真实存在的,是一种概念。。
用类描述事物的格式:

​ class 类名(标识符名称)
​ {
​ //特征—变量
​ //行为—函数
​ };

2、对象

​ 对象是类的实例化(特指实际的例子),将脑海中的概念实际的映照在现实事务中。如:交通工具——实例化——车。
对象的实例化格式:
(1)在栈区实例化——栈区实例化的对象,不需要用户手动的去释放内存,编译器会自动释放内存
格式:
​ 类名 对象名(标识符名称);
(2)在堆区实例化-------堆区实例化的对象,需要用户手动的去释放内存,如果不释放,很容易造成内存泄露
格式:
​ 类名 * 对象名(标识符名称)= new 类名;
(3)如何访问类里面的成员(成员变量+成员函数)
1)、在栈区实例化
访问成员格式:
​ 对象名(标识符名称). 成员;
2)、在堆区实例化
访问成员格式:
​ 对象名(标识符名称)-> 成员;

3、类的成员访问修饰符

类成员访问权限:
(1)public(公共)
整个类:可见
类外:可见
友元函数:可见
派生类(子类):可见
(2)private(私有)
整个类:可见
类外:不可见
友元函数:可见
派生类(子类):不可见
(3)protected(受保护)
整个类:可见
类外:不可见
友元函数:可见
派生类(子类):可见

​作用:为了保护类的成员

访问修饰符的作用范围:
​ 从修饰符:开始,一直到“}”(类结束)或下一个修饰符。

注:
(1)、如果在类里面没有写任何的类的成员访问修饰符,那么该类下的成员都是归于private属性下。
(2)、一般将成员变量放置到private属性下

4、构造函数

​ 构造函数是一种特殊的函数,用户可自己编写,如果用户没有显示的书写构造函数,那么编译器会帮用户自动的生成了一个默认的构造函数,可存在多个(一般用于初始化变量)
对象创建时,构造函数会自己调用

构造函数格式:

格式1:
​ 类名 (参数列表)
​ {
​ //代码块—用于初始化类的成员变量
​ }
格式2:
类名 (参数列表):成员变量1(初始值1),成员变量2(初始值2),…
{
//代码块
}

总结:构造函数与普通函数的区别
不同点:
1、普通函数前有返回值类型,而构造函数前没有返回值
2、普通函数后面没有初始化列表,而构造函数后有初始化列表
3、普通函数调用的时候以显式调用的方式,而构造函数不仅可以显示的调用还可以隐式的调用
相同点:
1、都可以带参数或者是不带参数
2、都可以发生重载

5、析构函数

​ C++里的析构函数也是一种特殊的函数,用户可自己编写,如果用户没有显示的书写析构函数,那么编译器会自动帮用户生成一个默认的隐藏的析构函数,且只可存在一个(一般用于释放空间)
对象消亡时自动调用

析构函数格式:

格式:
​ ~类名 ()
​ {
​ //代码块
​ }

6、拷贝构造函数

​ 拷贝------copy,如果用户需要用一个对象去初始化另外一个对象的时候,就会用到拷贝构造函数,其实质就是一个构造函数,如果用户没有显示的将拷贝构造函数写出来,那么编译器会自动的生成一个默认的隐藏的拷贝构造函数,反之,编译器就不会帮用户生成一个拷贝构造函数

拷贝构造函数的格式:

类名(const 类名 & obj)
​ {
​ //拷贝构造函数代码块
​ }

(1)浅拷贝
相当于是把一个对象里的成员变量和它的值拷贝了一份儿给另外一个对象。
如果类里面有指针对象并且在堆区开辟了空间,而且在析构函数里对指针对象进行了释放,这时候如果使用浅拷贝,造成堆区空间重复释放,而引起程序崩溃
(2)深拷贝
相当于是把一个对象里的成员变量拷贝了一份儿,但是变量的地址又重新开辟了一个空间,解决的问题就是堆区重复释放造成程序崩溃的问题

注:
1、析构函数不能带参数
2、类体里面只允许有一个析构函数(析构函数不能发生重载)
3、析构函数前没有返回值

7、this指针

​ 它是一种特殊的指针,它是存在于类的普通成员函数里,C++提供this指针的目的是为了解决二义性问题,并且它是隐式的指针,它是指向当前类。
原型:
​ 成员函数(类名 * const register this)
使用:
​ this->成员

注:
1、静态成员函数中没有this指针
2、友元函数中没有this指针

8、static

​ 用static声明函数或者是变量为静态的
(1)静态成员函数

格式:

​ static 返回值类型 函数名(参数列表)
​ {
​ //函数体
​ }

静态成员函数的访问格式:
a、通过类的对象访问类的静态成员
格式:
​ 对象名.静态成员;
​ 对象名->静态成员;
b、通过类加上域作用符号来访问类的静态成员
格式:
​ 类名 ::静态成员;

注意:
1、静态成员函数里没有this指针
2、静态成员函数不能访问类的非静态成员
3、类的非静态成员函数可以访问类的静态成员

(2)静态成员变量
格式:
static 数据类型 变量名;

注:
在类里面不能对类的静态成员变量进行初始化,需要在类外对静态成员变量进行初始化

类外初始化的格式:
数据类型 类名 ::静态成员变量名 = 初始值;

9、const

(1)const修饰成员变量
作用与C类似,有区别的是在类里声明的const成员变量可以不用声明的时候进行初始化,如果没有进行初始化就必须在构造函数的初始化列表中进行
初始化的工作
(2)const修饰的成员函数
const修饰的成员函数中不能去更改类的成员变量的值(只可读)

格式:
返回值类型 函数名 (参数列表)const
{
//函数体
}

10、友元

​目的:给类的外部提供一个访问类的私有成员的接口 。友元函数声明在类里,就表示该函数是该类的友元,那么就可以通过友元函数访问类的私有成员,友元函数的定义则放置在类的外部。
关键字:friend
(1)友元函数
友元函数声明在类里,就表示该函数是该类的友元,那么就可以通过友元函数访问类的私有成员,友元函数的定义则放置在类的外部。

friend 返回值类型 函数名(参数列表);//友元函数的声明

定义(在类外定义):
​ 返回值类型 函数名(参数列表)
​ {
​ //函数体
​ }

注:
1、友元函数虽然声明放置在类的内部,但是它不属于类的成员函数
2、友元函数没有this指针

(2)友元类
​ 友元类声明在一个其他类里,就表示该友元类是其他类的友元,那么就可以通过友元类访问其他类的私有成员,友元类的定义放置在其他类的外部。

声明格式:
​ friend class 类名;//声明了一个友元类

定义(在其他类外定义):
class Test
{
//类体
}

11、请教的问题

程序

#include"iostream"
using namespace std;
class person
{
public:char* name;int age;char * sex;person(){name = nullptr;age = 0;sex = nullptr;cout << "无参" << endl;}person(const char* n,int a,const char *s){    char* p= new char[strlen(n) + 1];name = p;strcpy_s(name, strlen(n) + 1, n);age = a;sex = (char*)s;cout << "有参 " << endl;}void set(const char* n, int a, const char* s){char * p = new char[strlen(n) + 1];name = p;name = (char *)n;age = a;sex = (char*)s;cout << "输入 " << endl;}person(const person& obj){ char *p = new char[strlen(obj.name) + 1];name = p;name = obj.name;age = obj.age;sex = obj.sex;cout << "拷贝 " << endl;}~person(){delete [] name;cout << "析构" << endl;}void print(){cout << "name:" << name << " age:" << age << " sex:" << sex << endl;cout << "name 地址:" << &name << endl;}
};int main()
{person p1;p1.set("花花", 12, "男");cout << "P1" << endl;p1.print();person p2("菲菲", 12, "女");cout << "P2" << endl;p2.print();person p3(p2);cout << "P3" << endl;p3.print();return 0;
}

执行结果

C++学习小结 类与对象相关推荐

  1. (JAVA学习笔记) 类与对象小结

    1.类与对象 类是一个抽象的模板: 对象是类的一个具体的实例: 2.方法 方法的定义:修饰符,返回类型,方法名,参数列表,异常抛出,返回值. 方法的调用:静态方法,非静态方法,形参和实参,值传递和引用 ...

  2. Java 入门知识学习笔记 (类和对象)

    一.类和对象的定义及关系 1.类是同一类别对象的抽象定义:可以理解为是某一类具体对象的模子,确定对象将会拥有的特性,包括该类对象具备的属性和方法. 2.对象是对类的一种具体化的客观存在,是对类的具体实 ...

  3. 【C++学习】类和对象(中)一招带你彻底了解六大默认成员函数

    前言:在之前,我们对类和对象的上篇进行了讲解,今天我们我将给大家带来的是类和对象中篇的学习,继续深入探讨[C++]中类和对象的相关知识!!! 目录 1. 类的6个默认成员函数 2. 构造函数 2.1概 ...

  4. java学习(类和对象)

    1.今日导师双选,排名靠前但被拒三次.意难平. 2.简历还在投递中,面试时更注重本科项目经历. 3.研究生阶段,计算机学术?代码能力?哪个重要? 4.循环<可能否>,期待变强... 一.简 ...

  5. 学习-Java类和对象之构造方法与对象创建之求椭圆面积

    任务描述 本关任务:已知椭圆的短半轴长为 15.50,长半轴的长为 20.00,计算椭圆面积. 椭圆的面积公式为S=πab,其中a.b分别为椭圆的短半轴长和长半轴长. 相关知识 为了完成本关任务,你需 ...

  6. Java学习总结——类和对象

    玖--面向对象设计 类( class )和对象( object )是面向对象程序设计最重要的概念.要深入了解 Java 程序语言,一定要树立面向对象程序设计的观念. 一.理解面向对象程序设计 面向对象 ...

  7. Java学习DAY8~类和对象(一)~2021.01.17

    文章目录 1. 类和对象 1.1 简单认识类 1.2 类的定义格式 1.3 尝试定义一个类 2. 类的实例化 2.1 什么是实例化 2.2 类和对象的说明 2.3 常见定义类语法错误 3. 类的成员 ...

  8. 【C++学习】类和对象--对象特性(1)

    构造函数和析构函数 对象的初始化和清理是两个非常重要的安全问题 一个对象或变量没有初始状态,对其使用后果是未知的 使用完一个对象或变量,没有及时清理,也会造成一定的安全问题 C++利用构造函数和析构函 ...

  9. 【C++学习】类与对象(一)——类的定义与对象实例

    一.面向对象程序设计的基本特点 1.1 抽象 面向对象方法中的抽象 ,是指对具体问题(对象)进行概括,抽出一类对象的公共性质并加以描述的过程. 一个问题的抽象包括:数据抽象和行为抽象(或被称为功能抽象 ...

最新文章

  1. JQuery UI之Autocomplete(2)后端获取数据
  2. java 获取系统时间 8小时 jre_Java获取时间与系统时间相差8小时终极解决方案
  3. 2. with check option能起什么作用?_【科普】专家教路:面膜护肤到底有什么用?
  4. 国外的电子商务开发情况
  5. 蓝奏云无视密码强制下载器
  6. sql casewhen
  7. YYText 源码剖析:CoreText 与异步绘制
  8. 美国Appstore游戏数据分析
  9. Java基础笔记(初学者适用)
  10. 青少年软件编程C++二级题库(11-20)
  11. 某代理网站免费IP地址抓取测试
  12. 笔记本连接显示器后没有声音_笔记本电脑外接显示器后没声音,请问怎么调整设置...
  13. 密码学写作论文排版操作手册,latex模板cryptocode
  14. 怎么把字母缩小当符号_必收藏干货!谭编教你轻松输入这些论文中的特殊符号:...
  15. addClass函数
  16. STM32 I2C驱动0.96寸OLED屏
  17. 关于高位字节与低位字节简洁明了的说明,以及高低字节序转换函数
  18. Google图书馆现在开幕
  19. linux系统下,Failing to install python-igraph
  20. iPhone 4 4.2.1越狱教程(RedSn0w 0.9.7b4)(转)

热门文章

  1. Android 动画详解-思维导图版
  2. http-https数据包的基本知识
  3. c语言打印吉祥图案,中国古代吉祥图案的寓意(二)
  4. lenovo thinkpad t460s trackpiont小红点移动速度调整
  5. 1035 不相交的线
  6. Codeforces Round #786 (Div. 3) Editorial(A/B/C/D)待补
  7. 2022蓝牙耳机大盘点测评,2022年最新蓝牙耳机排行榜
  8. 完美世界刘航:异构计算要避免昙花一现
  9. 软件测试基础面试常问问题(二)
  10. 将tomcat添加和删除到服务