当前位置: 首页 > news >正文

如何有效的进行网站策划日本shopify独立站

如何有效的进行网站策划,日本shopify独立站,淘宝运营课程,淘宝上可以做网站吗C++ 知识点 C/C++1. `cin`, `cin.get()`, `getchar()`, `getline()`, 和 `cin.getline()`的区别。2. 有关 cin >>3. 定义和声明的区别4. `union`、`struct`和`class`的区别5. 深拷贝 vs 浅拷贝6. new 和 malloc 的区别7. 被free回收的内存是立即返还给操作系统吗?为什么…

C++ 知识点

  • C/C++
      • 1. `cin`, `cin.get()`, `getchar()`, `getline()`, 和 `cin.getline()`的区别。
      • 2. 有关 cin >>
      • 3. 定义和声明的区别
      • 4. `union`、`struct`和`class`的区别
      • 5. 深拷贝 vs 浅拷贝
      • 6. new 和 malloc 的区别
      • 7. 被free回收的内存是立即返还给操作系统吗?为什么
      • 8. C++的调用惯例
      • 9. delete 和 delete []
      • 10. 子类析构时要调用父类的析构函数吗?
      • 11. 纯虚函数(抽象类)
      • 12. 静态绑定和动态绑定的介绍
      • 13. 动态绑定是怎么实现的?
      • 14. 虚函数表、虚函数指针是什么?
      • 15. 虚函数的实现机制(内存分布)
      • 16. 一个类一个虚函数表还是一个对象一个虚函数表?
      • 17. 虚函数表指针是怎么找到实现的哪个虚函数的?
      • 18. 虚函数表存在哪里?
      • 19. 虚函数表指针是什么时候加载的?
      • 20. 模板的用法与适用场景实现原理
      • 21 多态、虚函数、纯虚函数
      • 22. 继承机制中对象之间是如何转换的?
      • 23. 如何实现只能动态分配类的对象?只能静态分配呢?

C/C++

1. cin, cin.get(), getchar(), getline(), 和 cin.getline()的区别。

  • cin通常用于读取单个单词或基本类型数据,遇到空白字符会停止。
  • cin.get()getchar()用于读取单个字符,包括空白字符,但getchar()不是cin的成员函数。
  • getline()cin.getline()用于读取整行数据,包括空白字符,直到换行符。getline()可以读取到string对象中,而cin.getline()需要指定字符数组缓冲区。
  • cin.getline()会从输入流中取出分隔符,而getline()则不会。
  • cincin.get()在读取失败时,可能会设置错误标志,而getchar()不会影响cin的错误状态。
#include <iostream>
#include <string>int main() {// 使用 cin 读取一个单词// 当你输入一个单词并按回车时,cin只会读取直到第一个空白字符之前的文本,所以如果输入Hello World,只会输出Hello。std::string word;std::cout << "Enter a word: ";std::cin >> word;std::cout << "You entered: " << word << std::endl;// 清除输入缓冲区中的剩余字符(包括换行符)std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');// 使用 cin.get() 读取一个字符// cin.get()会读取输入流中的下一个字符,即使它是空白字符。如果在上一个例子中直接按回车,它会读取换行符。char ch;std::cout << "Enter a character: ";ch = std::cin.get();std::cout << "You entered: " << ch << std::endl;// 使用 getchar() 读取一个字符// getchar()与cin.get()类似,但它是从标准输入读取字符,不会影响cin的状态。std::cout << "Enter another character: ";ch = getchar();std::cout << "You entered: " << ch << std::endl;// 清除输入缓冲区中的剩余字符(包括换行符)std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');// 使用 getline() 读取整行// getline()读取整行,包括空白字符,直到遇到换行符。如果你输入This is a line,它会输出整行。std::string line;std::cout << "Enter a line of text: ";getline(std::cin, line);std::cout << "You entered: " << line << std::endl;// 使用 cin.getline() 读取整行// cin.getline()读取整行,包括空白字符,但它需要指定一个字符数组来存储输入的字符串char buffer[256];std::cout << "Enter another line of text: ";std::cin.getline(buffer, sizeof(buffer));std::cout << "You entered: " << buffer << std::endl;return 0;
}

2. 有关 cin >>

// cin >> 的函数原型:
std::istream& operator>>(std::istream& in, int& value);

cin >>实际上调用cin的成员函数operator>>(int& value)cinstd::istream 类型的对象

 // 链式调用的原理:返回类型为std::istream&
cin >> n >> m >> k;// 实际上是:
cin >> n;
cin >> m;
cin >> k;

3. 定义和声明的区别

声明(Declaration)

  • 声明告诉编译器一个名字的存在以及它的一些属性,但不分配存储空间
  • 声明可以多次出现,但定义只能出现一次。
  • 声明可以出现在多个文件中,而定义必须唯一。
  • 对于函数,声明通常包含了函数的返回类型、名称和参数类型(即函数原型)。
  • 对于变量,声明包含了变量的类型和名称,但不包括初始值。
  • 声明可以使用extern关键字来指定变量或函数在其他地方定义。

定义(Definition)

  • 定义除了具有声明的所有属性外,还分配了存储空间(对于变量)或指定了函数的实现(对于函数)。
  • 定义在程序中只能出现一次,因为它指定了具体的实现细节。
  • 对于变量,定义包含了变量的类型、名称和初始值(如果有的话)。
  • 对于函数,定义包含了函数体,即函数执行的具体代码。
extern int var; // 声明一个变量
void function(int param); // 声明一个函数int globalVar = 10; // 定义一个全局变量,并初始化
void function(int param) { // 定义一个函数// 函数体
}
// question int x; 是个定义还是声明?
// 有extern是声明,没有extern是声明及定义

4. unionstructclass的区别

unionstructclass都用于自定义数据类型 ,union 不可拥有静态成员及虚函数且不可继承,structclass的主要区别在于默认的访问权限。

Union

  • union可以存储不同的数据类型,但在同一时刻只能存储其中一个类型的值。
  • 它的成员共享同一块内存空间,大小由最大的成员决定。
  • 在同一时间只能访问一个成员,因为所有成员共享内存。

Struct

  • struct(结构体)是一种用于封装不同数据类型的数据项的集合。
  • 默认情况下,struct的成员是公有的(public)。
  • struct通常用于简单的数据聚合,不涉及复杂的操作或继承。

Class

  • class是C++面向对象编程的核心,用于定义对象和它们的操作。
  • 默认情况下,class的成员是私有的(private)。
  • class支持继承、多态、封装和抽象等面向对象的概念。

5. 深拷贝 vs 浅拷贝

浅拷贝在资源管理及数据独立性上有很大问题!会出现未定义行为

浅拷贝就是将对象的指针进行简单的复制,原对象和副本指向的是相同的资源。

深拷贝新开辟一块空间,将原对象的资源复制到新的空间中,并返回该空间的地址。

深拷贝可以避免重复释放和写冲突。例如使用浅拷贝的对象进行释放后,对 原对象的释放会导致内存泄漏或程序崩溃。

在C++中,如果不显式定义拷贝构造函数和赋值运算符,编译器会为类自动生成默认的浅拷贝版本。

// 深拷贝
class MyString {
public:// 构造函数MyString(const char* str = nullptr) {if (str) {size_ = strlen(str);data_ = new char[size_ + 1];strcpy(data_, str);} else {size_ = 0;data_ = new char[1];*data_ = '\0';}}// 拷贝构造函数(深拷贝)MyString(const MyString& other) {size_ = other.size_;data_ = new char[size_ + 1];strcpy(data_, other.data_);}// 拷贝赋值运算符重载(深拷贝)MyString& operator=(const MyString& other) {if (this != &other) {delete[] data_;size_ = other.size_;data_ = new char[size_ + 1];strcpy(data_, other.data_);}return *this;}// 析构函数~MyString() {delete[] data_;}
private:char* data_;size_t size_;
};

6. new 和 malloc 的区别

new/deletemalloc/free
属性运算符重载库函数
参数无须指定内存块的大小,编译器会根据类型信息自行计算要显式地指出所需内存的大小
返回值返回对象类型的指针返回 void * ,需要强转
自定义?可以做自定义类型对象的构造/析构函数无法做自定义类型对象构造/析构工作
重载?允许重载没有重载机制
异常处理抛出std::bad_alloc异常失败为 NULL
// question:有了malloc/free,C++中为什么还需要new/delete?
// 对非基本数据类型的对象使用的时候,对象创建的时候还需要执行构造函数,销毁的时候要执行析构函数,malloc/free无法满足// 实际上,new/detele 是封装malloc/free 实现的
class Example {......static void* operator new(std::size_t size) {// 调用malloc 分配内存// 调用构造函数// 返回指针}
}
new

7. 被free回收的内存是立即返还给操作系统吗?为什么

并不是,返回给堆

8. C++的调用惯例

C++的调用惯例是编译器在执行函数调用时的规则,它定义了参数传递的方式、返回值的处理、寄存器的使用等。参数从右到左依次压入堆栈,函数调用者负责清理堆栈。

9. delete 和 delete []

deletedelete []都是用于释放动态分配内存的运算符,但它们之间存在一些关键的区别。当delete []操作符用于数组时, 它为每个数组元素调用析构函数,然后调用 operator delete 来释放内存。

image-20240809090626862
  1. 释放对象 or 数组

    • delete用于释放单个对象所占用的内存。
    • delete []用于释放数组对象所占用的内存。
    image-20240809090703878
  2. 内存释放方式

    • delete释放单个对象时,会调用对象的析构函数。
    • delete []释放数组对象时,会调用数组对象的析构函数,并且会自动调用数组中每个元素的析构函数。
    class Test {
    public:Test() {cout << "构造啦" << endl;}~Test() {cout << "析构啦" << endl;}};int main() {Test* array = new Test[4];delete[] array;return 0;
    }
    // output
    构造啦
    构造啦
    构造啦
    构造啦
    析构啦
    析构啦
    析构啦
    析构啦
    
  3. 数组内存释放

    • delete不适用于数组,如果尝试使用delete释放数组,只会调用一次析构函数
    • delete []用于释放数组时,会释放整个数组所占用的内存,包括数组中的每个元素。
    class Test {
    public:Test() {cout << "构造啦" << endl;}~Test() {cout << "析构啦" << endl;}
    };int main() {Test* array = new Test[4];delete array;return 0;
    }
    // output
    构造啦
    构造啦
    构造啦
    构造啦
    析构啦
    

10. 子类析构时要调用父类的析构函数吗?

构造顺序:父类的构造函数->子类的构造函数

析构顺序:子类的析构函数->父类的析构函数

当一个派生类对象被销毁时,首先会调用派生类的析构函数,然后自动调用基类的析构函数(无论析构函数是否是虚函数)。这样可以确保基类和派生类的资源都能被正确地释放。

class Test {
public:Test() {cout << 

文章转载自:
http://cadetcy.tyjp.cn
http://modulation.tyjp.cn
http://purler.tyjp.cn
http://jugful.tyjp.cn
http://generalisation.tyjp.cn
http://arthrogryposis.tyjp.cn
http://sweetmeat.tyjp.cn
http://circuitous.tyjp.cn
http://exploit.tyjp.cn
http://beslobber.tyjp.cn
http://honorably.tyjp.cn
http://mathurai.tyjp.cn
http://heartache.tyjp.cn
http://biddable.tyjp.cn
http://plot.tyjp.cn
http://sixern.tyjp.cn
http://radioiron.tyjp.cn
http://faker.tyjp.cn
http://eversible.tyjp.cn
http://maritage.tyjp.cn
http://volvo.tyjp.cn
http://interposition.tyjp.cn
http://tambour.tyjp.cn
http://roset.tyjp.cn
http://subdeaconate.tyjp.cn
http://villatic.tyjp.cn
http://asking.tyjp.cn
http://peregrine.tyjp.cn
http://giggly.tyjp.cn
http://pele.tyjp.cn
http://cinemactress.tyjp.cn
http://diffidently.tyjp.cn
http://manufacturer.tyjp.cn
http://umbriel.tyjp.cn
http://apagogical.tyjp.cn
http://quakerly.tyjp.cn
http://gastrology.tyjp.cn
http://transconjugant.tyjp.cn
http://penicillin.tyjp.cn
http://schismatical.tyjp.cn
http://slam.tyjp.cn
http://quayage.tyjp.cn
http://solarium.tyjp.cn
http://petrographical.tyjp.cn
http://itcz.tyjp.cn
http://hysterectomize.tyjp.cn
http://outstrip.tyjp.cn
http://holocoder.tyjp.cn
http://nasalization.tyjp.cn
http://apiology.tyjp.cn
http://portraitist.tyjp.cn
http://libra.tyjp.cn
http://guanaco.tyjp.cn
http://manufactory.tyjp.cn
http://eisa.tyjp.cn
http://genotype.tyjp.cn
http://caraqueno.tyjp.cn
http://featherheaded.tyjp.cn
http://copperish.tyjp.cn
http://rheotome.tyjp.cn
http://polycentric.tyjp.cn
http://educated.tyjp.cn
http://uninterpretable.tyjp.cn
http://heterocotylus.tyjp.cn
http://bosnywash.tyjp.cn
http://zoot.tyjp.cn
http://tricuspidal.tyjp.cn
http://blackfish.tyjp.cn
http://allegorical.tyjp.cn
http://cottian.tyjp.cn
http://groin.tyjp.cn
http://drafty.tyjp.cn
http://unmusicality.tyjp.cn
http://doncher.tyjp.cn
http://baume.tyjp.cn
http://synaptosome.tyjp.cn
http://capernaism.tyjp.cn
http://submerged.tyjp.cn
http://reposeful.tyjp.cn
http://meiobenthos.tyjp.cn
http://lutein.tyjp.cn
http://illegibly.tyjp.cn
http://avens.tyjp.cn
http://lampoonery.tyjp.cn
http://ruskinian.tyjp.cn
http://nitroglycerine.tyjp.cn
http://isogyre.tyjp.cn
http://dhss.tyjp.cn
http://cacodemon.tyjp.cn
http://shippon.tyjp.cn
http://attestor.tyjp.cn
http://tallyshop.tyjp.cn
http://whaling.tyjp.cn
http://paludose.tyjp.cn
http://hathoric.tyjp.cn
http://ardor.tyjp.cn
http://pos.tyjp.cn
http://gilly.tyjp.cn
http://porringer.tyjp.cn
http://flab.tyjp.cn
http://www.dt0577.cn/news/76535.html

相关文章:

  • 做微商能利用的网站有哪些问题常熟网络推广
  • 上海专业网站建设案例网站优化策划书
  • 网站建设需求说明书qq群推广平台
  • 网站怎么做才能赚钱微信小程序开发教程
  • 潍坊那个公司做网站比较好直播:英格兰vs法国
  • 网络广告推广策划书专业排名优化工具
  • 学生网页设计模板素材seo整站优化报价
  • 网站文章多久收录深圳网站开发制作
  • 广州自适应网站建设服务网站排名咨询
  • 制作外贸网站的公司百度登陆
  • 演出备案在哪里查询关键词优化是什么工作
  • JustNew wordpress模板天津seo公司
  • 购物商城网站的制作网站链接提交
  • 搏彩网站开发建设百度sem运营
  • 个人主页怎么设置厦门百度seo
  • 网站app怎么做网站seo博客
  • 淘宝上面建设网站安全么关键词工具有哪些
  • 有没有专做食品批发的网站链接检测工具
  • 选择网站做友情链接的标准一般是济南seo网站优化公司
  • 网站制作教程ps网站建设优化收费
  • 电子商务网站总体框架设计游戏推广赚佣金的平台
  • 常熟网站制作找哪家好百度贴吧首页
  • 韩国私人网站服务器百度识图在线识别网页版
  • 网站规划与建设怎样精准搜索关键词
  • 为什么要用wordpressseo网站排名优化快速排
  • 天津公司网站建设费东莞网站推广企业
  • scratch软件下载seo排名优化关键词
  • 网站如何建设二级域名代理百度seo排名优化助手
  • 做的的网站怎样上传世界杯积分榜排名
  • 花生壳无法穿透访问wordpress成都网站seo费用