首页 > 编程语言 >说说对c++面向对象(oop)的三个特性的理解,求大佬指指点点好好指导一下

说说对c++面向对象(oop)的三个特性的理解,求大佬指指点点好好指导一下

时间:2024-10-24 08:49:40浏览次数:3  
标签:初始化 Person int c++ class 面向对象 抽象 oop public

前言:在c++中oop编程是十分复杂的。但是我想不会有人可以去拒绝一种本土的非解释语言的语言。或许c#,java,以及解释语言lua,python都是不错的语言所有能做到事情都一样。 不过作为

一个小白我很难去评价一件事,每个人都有自己的看法。

类即是万物,所谓类就是抽象,白话来讲就是,你我都是人,人是一类,但是我们都是看得见摸得着的实例化对象,没错你对象我也是对象,初始化就好像我们开始都是一个精子加卵细胞合成,

或者是女娲捏人哈哈哈这是一个不错的例子,如果你理解不了那就重开吧,哈哈哈开个玩笑,这并不是很难理解的。其实结构体和类没巨大的区别。结构体也是很实用的。

1.封装

我想封装是很没有必要讲的,就是私密一些东西。她所展现的其实就是一个不可访问属性。

还有就是将一些细节化不让用户看见或使用,避免破坏了整个内部结构。这一也可以凸显出模块化的思想。

class Person {
public:
		int height;
private:
	int money;
	long idcard;
};

事实上我们不能从外部去访问他。 emmm我想这点不是很能多说的一件事。或许后续补充一些会更好描述。

2.继承

这里就十分需要有一个更加抽象化的概念在,面向对象本就是抽象的。

除了继承还有委托和复合,所谓复合就是将一个类实例化在另一个类中,而委托则是实例化一个指针在类了。这是后面有一个提到的一个初始化的问题。

class Person {
public:
		int height;
		int age;
		string name;
private:
	int money;
	long idcard;
};
class Man :public Person {
public:
	testicles testicles0;

};
class Woman :public Person {
public:
	breast breast0;
};

 我想人是我最喜欢的一个例子,因为那是最常见的例子,父类是更加抽象的一个类,

例如在女人和男人,像睾丸这个就需要在男人这个类里了(这里就是一个复合的概念了当然睾丸必须是一个类,我想想,睾丸里面可以是他的大小精子产生速度哈哈,我知道说这些很不礼貌,但是需要比较科学看待);女人里面就是有乳房,而他们更抽象就是人的年龄都需要抽象到父类,年龄,姓名都是任何女人男人都具备的。就把这些抽象出来。在设计模式中会有很多委托继承。

在c艹里面三个关键词public protected private 是公开的,保护的,私密的

当然继承也有表格。

或许咋一看很复杂其实也是很复杂。一遍遍写就是知道了。

3.多态

 这就不得不提一个虚函数概念了。

#include<iostream>
class Person {
public:
		int height;
		int age;
		virtual void goWC() = 0;
private:
	int money;
	long idcard;
};
class Man :public Person {
public:
	void goWC () override
	{
		std::cout << "going man wc" << std::endl;
	}

};
class Woman :public Person {
public:
	void goWC() override
	{
		std::cout << "going woman wc" << std::endl;
	}
};

或许可以把他叫做一个函数的抽象,男生去上厕所要去男厕所,女的要去女厕所。后续把想到的再补充怎么描述。

4说说初始化

在子类实例化的时候会调用父类初始化的函数,这里我想说明一点,在我们自动管理内存的时候

他所用的初始化是无参初始化,默认也是无参初始化,但是我们写了有参,默认构造就会被pass

需要再写一个无参构造。

#include<iostream>
class Person {
public:
	Person() {std::cout << "Person" << std::endl; }
};
class Man :public Person {
public:
	Man() { std::cout << "Man" << std::endl; }
};
class Woman :public Person {
public:
	Woman() { std::cout << "Woman" << std::endl; }
};
int main()
{
	Man man1;
	
	return 0;
}

现在一目了然,那么来讲讲之前提到复合,复合也有肯定有初始化你们可以看看父类复合

子类复合和初始化的顺序。

#include<iostream>
class fingger {
public:
	fingger() { std::cout << "fingger" << std::endl; }
};
class jiji {
public:
	jiji() { std::cout << "jiji" << std::endl; }
};
class Person {
public:
	fingger f1;
	Person() {std::cout << "Person" << std::endl; }
};
class Man :public Person {
public:
	jiji jiji0;
	Man() { std::cout << "Man" << std::endl; }
};
class Woman :public Person {
public:
	Woman() { std::cout << "Woman" << std::endl; }
};
int main()
{
	Man man1;
	
	return 0;
}

标签:初始化,Person,int,c++,class,面向对象,抽象,oop,public
From: https://blog.csdn.net/m0_62718479/article/details/143198118

相关文章

  • C++中指针、引用与const的深入解析
    一、对数组的引用constintn=10;intar[n]={12,23,34,45,56,67,78,89,100};描述数组:类型加上原始空间大小。​int&ra=ar[1];​int&br=ar;//errorint(&br)[n]=ar;//okint*pa[10];int&pr[10];//error;为什么不能编译成功引用数组的概念:在C++中,......
  • C++ set和map的模拟实现
    我们之前在红黑树里讲过,STL容器中的set与map底层就是一棵红黑树,要模拟实现set与map底层需要实现红黑树,并将其做一些改造1.set类与map类的框架1.1setnamespacepc{ template<classK> classset { public://成员函数 private: RBTree<K,K,SetC......
  • C++运算符优先级
    在C++中,二进制运算符的优先级如下(从高到低):逻辑非(!)按位取反(~)乘法(*),除法(/),取余(%)加法(+),减法(-)左移(<<),右移(>>)关系运算符(<,<=,>,>=)等于(==),不等于(!=)按位与(&)按位异或(^)按位或(|)逻辑与(&&)逻辑或(||)条件运算符(?:)......
  • 实验2 C++
    任务1:t.h1#pragmaonce23#include<string>45//类T:声明6classT{7//对象属性、方法8public:9T(intx=0,inty=0);//普通构造函数10T(constT&t);//复制构造函数11T(T&&t);//移动构造函数12~T();......
  • C++基础——敲桌子游戏
    C++基础——敲桌子游戏一、敲桌子1.游戏内容:2.编译思路二、头文件三、主文件四、整体代码五、运行结果一、敲桌子1.游戏内容:从1开始数到100,如果数字的个位或者十位为7,或者数字是7的倍数,则显示"敲桌子",否则显示数字本身。2.编译思路系统通过for循环语句打印从1到......
  • C++调试经验(4):Linux下调试CAN通信的方法
    1.CAN通信介绍         CAN(ControllerAreaNetwork,控制器局域网)是一种现代的通信协议,用于在各种应用中的不同设备之间进行高速通信。它最初由德国的Bosch公司于20世纪80年代开发,用于汽车中的电子系统之间的通信,目前已广泛应用于汽车行业以及其他工业领域。CAN通信......
  • C++学习路线(二十一)
    俄罗斯方块 初始化页面#include<iostream>#include<graphics.h>#include<Windows.h>usingnamespacestd;voidwelcome(){ initgraph(550,660); HWNDwindow=GetHWnd(); SetWindowText(window,_T("俄罗斯方块")); setfont(40,0,_T("A......
  • C++ deque容器
    dequedeque是C++STL库中的一个容器,常用来当stack、queue的适配器。在算法领域中,适用于解决单调队列单调栈等问题。下面我们就来认识一下deque容器。文章目录deque1.vector与list区别2.deque的介绍和使用2.1deque的介绍2.2deque的使用2.2.1数据访问(**Elementacce......
  • UML与面向对象程序设计原则
    UML与面向对象程序设计原则本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、掌握面向对象程序设计中类与类之间的关系以及对应的UML类图;2、理解面向对象程序设计原则。 [实验任务一]:UML复习阅读教材第一章复习UML,回答下述问题:面向对象程序设计中类与类的关系都......
  • C++ STL基本用法概述(简洁版)
    vector变长数组,倍增思想基本函数 size()   //返回元素个数,时间复杂度为o(1)empty()   //返回a是否为空,时间复杂度为o(1)clear()   //清空front()/back()   //返回第一个数/最后一个数push_back()   //最后插入一个数pop_back()   //删掉最后一个数......