栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++新经典课程学习笔记之第三章-3.1小节

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++新经典课程学习笔记之第三章-3.1小节

 本博客将记录:类这个知识点的笔记!

(这个在学习C++基础课程时已经学习过一次了,这里再次简单地回顾一下而已)

这方面知识分为以下4个点:

  一、综述
  二、类基础
  三、成员函数
  四、对象的拷贝

  一、综述:

类是我们自定义的数据类型(区别于内置的数据类型比如int/float/double)

设置类时要考虑的角度:

①站在程序员(设计者)的角度来考虑(你要设计哪些成员函数?有哪些成员?这些都是设计者设计类时需要考虑的事情)

②站在使用者的角度来考虑(你到底要给使用你定义的类的用户开放啥函数接口?还有对用户禁止开放哪些函数接口?这些都需要我们设计类时站在使用者的角度来thinking)

③父类、子类问题(这就会涉及到继承和多态这2个总要话题)

  二、类基础:

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

②一个类的构成:成员变量、成员函数(有许多特殊的成员函数,后序会慢慢讲解)

注意:一个类,如果你给其定义默认构造函数、默认拷贝构造函数、默认析构函数 的话,那么系统或者说编译器就会给你自动生成空实现的上述3种函数,所谓空实现其实就是函数体内的语句都为空的意思。

当然,一旦你定义了上述3个函数中的1种,那么编译器就不会再自动给你定义空实现的该类函数了

③访问类的成员时:

        -if你定义了类的对象,那么就用 对象名.成员名 来访问成员

        -if你定义了指向这个类对象的指针,那么就用 指针名 ->成员名 来访问成员

Person p1(888);
p1.m_Age = 999;
cout << p1.m_Age << endl;//999
Person* p2 = new Person;
p2->m_Age = 100;
cout << p2->m_Age << endl;//100

④public访问权限的成员提供类的接口,是暴露给外界、供外界调用的。

private访问权限的成员提供各种实现类功能的细节,但不提供给使用者(也即使用者无法使用)。

这里对于C++中的三种继承方式的再理解,可以看我之前写的博客:

C++中的三种继承方式

⑤在cpp中,struct是成员访问权限默认为public的class,class的成员访问权限则默认为private

struct A{......} 等价于 class A{public: ......}

class A{......}等价于 class A{private:......}

当然,一般而言我们都是写class的,极少会使用struct

  三、成员函数

Time.h:

#ifndef __TIME_H__
#define __TIME_H__
#include
using namespace std;
class Time {
public:
	int m_Hour;//时
	int m_Minute;//分
	int m_Second;//秒
public:
	Time():m_Hour(0), m_Minute(0), m_Second(0){}
	//构造函数
	Time(int h,int m,int s) :m_Hour(h), m_Minute(m), m_Second(s){}
	//成员函数:(其实也包括构造和析构函数)
	//我们注意到,哪个对象调用了成员函数时,这些成员变量就会属于哪个对象
	//我们可以理解为:类的成员函数知道 到底是哪个对象调用自己的。
	void reviseTime(int h, int m, int s);
	void showTime();
	Time(const Time& t);
	Time& operator=(const Time& t);
};
#endif

Time.cpp:

#include"Time.h"
void Time::reviseTime(int h, int m, int s) {
	this->m_Hour = h;
	this->m_Minute = m;
	this->m_Second = s;
}
void Time::showTime() {
	cout << this->m_Hour << endl;
	cout << this->m_Minute << endl;
	cout << this->m_Second << endl;
}
//拷贝构造函数
Time::Time(const Time& t)
{
	cout << "拷贝构造啦啦啦!" << endl;
	this->m_Hour = t.m_Hour;//时
	this->m_Minute = t.m_Minute;//分
	this->m_Second = t.m_Second;//秒
}
//拷贝赋值函数
Time& Time::operator=(const Time& t) {
	cout << "拷贝赋值啦啦啦!" << endl;
	this->m_Hour = t.m_Hour;//时
	this->m_Minute = t.m_Minute;//分
	this->m_Second = t.m_Second;//秒
	return *this;
}

main.cpp:

#include
#include"Time.h"
using namespace std;
void test() {
	Time t;
	t.reviseTime(11, 14, 5);
	cout << t.m_Hour << endl;
	cout << t.m_Minute << endl;
	cout << t.m_Second << endl;
}
int main(void) {
	test();
	system("pause");
	return 0;
}

  四、对象的拷贝:(也可以称之为定义对象时对其进行初始化)

//在上述main.cpp中继续添加如下代码:
Time t;
t.reviseTime(11, 14, 5);
Time t2;
t2.reviseTime(12, 26, 4);
Time t3 = t2;//拷贝方式1  这是拷贝构造do的事情
Time t4(t2);//拷贝方式2   这是拷贝构造do的事情
Time t5{ t2 };//拷贝方式3 这是拷贝构造do的事情
Time t6 = { t2 };//拷贝方式4 这是拷贝构造do的事情
t3.showTime();//12 26 4
t4.showTime();//12 26 4
t5.showTime();//12 26 4
t6.showTime();//12 26 4

以上这些拷贝都是基于类中的拷贝构造函数的,也即上述所写的:

Time::Time(const Time& t)
{
	cout << "拷贝构造啦啦啦!" << endl;
	this->m_Hour = t.m_Hour;//时
	this->m_Minute = t.m_Minute;//分
	this->m_Second = t.m_Second;//秒
}

注意事项:

①千万不要把拷贝构造函数和拷贝赋值函数理解为同一个函数,虽然这2个函数都能实现类似的拷贝赋值的功能,但也千万不要混淆了!

②如果说你不想单纯的do这样的浅拷贝(也即简单的赋值拷贝)操作的话,你还想do深拷贝操作的话,那么你大可以自己去写一个拷贝构造函数or拷贝赋值函数去达到你的目的。

注解:关于深拷贝和浅拷贝在我很早之前写的文章中有所提及,如果你现在看到我的总结笔记认为自己不懂这个知识点,那么你大可以去百度or就在本站去搜求了解学习它,或者等我后序的学习笔记总结,我都会把这些细枝末节但又重要的知识点总结好,以便于自己日后coding复习或者供各位努力的人儿复习使用。

 好,那么以上就是这一3.1小节我所回顾的内容的学习笔记,希望你能读懂并且消化完,也希望自己能牢记这些小小的细节知识点,加油吧,我们都在coding的路上~

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/429757.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号