C++和Go简单栗子

C++到Go语言对比

概要

回顾了C++,学习了Go,栗子大意是根据输入输出,多次输入过后给出结果。

比较

  • C++:1-2头文件定义使用哪些库,3指定命名空间,8-21创建基类,22-37创建派生类,38-last主函数。C++标准输入输出库iostream,cin输入cout输出。类中包括成员变量和成员方法。

  • go:1指定包,3-6指定函数库,go中没有类的概念,13-16定义结构体,19结构体嵌套,24-44主函数。25-26初始化结构体,46-last定义结构体成员方法。

  • 感觉Go写起来更像Python一些,Go没有了类的概念感觉很特别,保留了C++的结构体和指针,Go不需要写分号标识一句话的结束(Python也是),Go的转型应该是像C++的需要手动(39-40)。

代码

C++实现

#include <iostream>
#include <string>
using namespace std;
/**
故事概要:
你是一个好人吗? 请回答是或者不是
**/
class Info
{
    public:
        string answer;
        string question;
        string good_answer;
        string bad_answer;
        Info()
        {
            question = "Are you a good man? Answer me yes or no, please";
            good_answer = "You are great, god bless you";
            bad_answer = "oh, really stupid";
        }
};
class GameInfo: public Info
{
    public:
        void printResult(int i)
        {
            cout << i << endl;
            if (i >= 3)
            {
                cout << "game over, you lost" << endl;
            }
            else
            {
                cout << "game over, you win" << endl;
            }
        }
};
int main()
{
    GameInfo gameInfo;
    for (int i = 0; i < 3; i++)
    {
        cout << gameInfo.question << endl;
        cin >> gameInfo.answer;
        if (gameInfo.answer == "yes")
        {
            cout << gameInfo.good_answer << endl;
            break;
        }
        else if(gameInfo.answer == "no")
        {
            cout << gameInfo.bad_answer << endl;
            break;
        }
        else
        {
            cout << "bad answer, try again please" << endl;
            cout << "you left " << 2-i << " times"<< endl;
        }
    }

    gameInfo.printResult(i);
    return 0;
}

Go实现

package main

import (
   "fmt"
   "strconv"
)

/**
故事概要:
你是一个好人吗? 请回答是或者不是
 */

type BaseInfo struct {
    answer string
    question string
 }

 type GameInfo struct {
   BaseInfo
   goodAnswer string
   badAnswer string
 }

func main()  {
   gameInfo := &GameInfo{BaseInfo{question:"Are you a good man? Answer me yes or no, please\n"},
   "You are great, god bless you\n", "oh, really stupid\n"}
   var i int = 0
   for ; i < 3 ; i++ {
      fmt.Print(gameInfo.question)
      fmt.Scanln(&gameInfo.answer)
      if gameInfo.answer == "yes"{
         fmt.Println(gameInfo.goodAnswer)
         break;
      }else if gameInfo.answer == "no"{
         fmt.Println(gameInfo.badAnswer)
         break;
      } else {
         fmt.Println("bad answer, try again please")
         time:= strconv.Itoa(2-i)
         fmt.Println( "you left " + time + " times")
      }
   }
   gameInfo.printResult(i);
}

func (gameInfo *GameInfo)printResult(i int)  {
   if i >= 3 {
      fmt.Println("game over, you lost")
   }else {
      fmt.Println("game over, you win")
   }
}
<think>我们被要求根据提供的引用信息,回答关于Go语言C++的对比、特点使用场景的问题。注意引用标记格式要求。 引用内容总结: [1]:对比了GoC++的速度与可读性、性能、安全性、应用社区。 [2]:Java、C++Go的特性对比,指出C++在系统级游戏引擎占优,Go在云原生微服务表现出色。 [3]:指针传值的区别,Go有垃圾回收,返回局部变量指针合法;传复杂类型(如map)是传引用(实际上是浅拷贝)。 [4]:标准库性能对比,Go标准库强大开箱即用,C++标准库工具不多但可使用boost等第三方库。 [5]:面向对象编程的对比,C++有类,Go通过结构体接收者方法模拟部分面向对象特性。 回答结构: 1. 语言特点对比: - 语法可读性 - 内存管理(垃圾回收 vs 手动管理) - 并发模型 - 标准库生态系统 - 面向对象支持 2. 性能对比 3. 使用场景 4. 社区生态 注意:使用行内公式(如果有数学表达式)用$...$,独立公式用$$...$$(但这里可能不需要数学公式,除非涉及算法复杂度等)。 同时,在回答中引用参考内容的地方加上引用标记。 生成相关问题放在最后。 </think>### Go语言与C++的对比分析 #### 一、核心特性对比 1. **语法设计** - **Go**:语法简洁(仅25个关键字),强制统一代码格式(`gofmt`),内置垃圾回收机制[^3][^5],例如: ```go type Animal struct { name string } func (a *Animal) eat() { /* 方法实现 */ } // 通过结构体接收者模拟面向对象 ``` - **C++**:支持多范式(面向对象/泛型/过程式),语法复杂(60+关键字),需手动内存管理,例如: ```cpp class Animal { private: std::string name; public: virtual void eat() { /* 虚函数实现多态 */ } }; ``` > **关键差异**:Go通过组合而非继承实现代码复用,C++支持完整的面向对象特性(继承/多态)[^5]。 2. **内存管理** - Go:自动垃圾回收(GC),允许安全返回局部变量指针[^3] - C++:手动内存管理(`new`/`delete`),需防范内存泄漏野指针 3. **并发模型** - Go:原生协程(goroutine)通道(channel),例如: ```go go func() { /* 并发任务 */ }() // 一键启动协程 ``` - C++:依赖线程库(`std::thread`)同步原语(互斥锁等) 4. **标准库与生态** - Go:丰富标准库(网络/加密/JSON等),开箱即用[^4] - C++:标准库较基础(STL容器/算法),依赖Boost等第三方库[^4] #### 二、性能对比[^1][^4] | 维度 | Go | C++ | |------------|-----------------------------|--------------------------| | 运行速度 | 接近C++(约慢10-20%) | 极致优化,硬件级控制 | | 编译速度 | 极快(秒级编译) | 较慢(模板实例化耗时) | | 安全性 | 内存安全(GC防护) | 需开发者自主保障 | #### 三、典型应用场景[^1][^2] | 语言 | 优势场景 | |------|----------------------------------------------| | Go | 云原生服务(Docker/K8s)、微服务、高并发API、CLI工具 | | C++ | 游戏引擎(Unreal)、高频交易系统、操作系统、嵌入式开发 | #### 四、社区与趋势[^1][^2] - **Go**:谷歌主导,云原生领域快速增长,强调开发效率 - **C++**:ISO标准演进(C++20/23),系统级开发主流选择 > **总结**:Go适合需要快速开发高并发的分布式系统,C++适用于对性能有极致要求的底层系统。选择时需权衡开发效率与运行性能[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值