前言:在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