标题:c++中关于class的问题
只看楼主
food_bird
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-7-30
结帖率:100%
已结贴  问题点数:10 回复次数:1 
c++中关于class的问题
//我写一个简单的Student类
class Student
{
public:
    int  age;
    int math;
    int english;
    int score;
public:
    int getAge()
    {
        return age;
    }
    void setM(int m)
    {
        math = m;
    }
    void setE(int e)
    {
        english = e;
    }
    int getS()
    {
        score = math + english;
        return score;
    }
};
int main()
{
    Student s1, s2;
    s1.age = 13;
    s1.setM(95);
    s1.setE(70);
    s2.age = 14;
    s2.setM(85);
    s2.setE(85);
    cout << "xx同学" << s1.getAge() << "岁,总分:" << s1.getS() << endl;
    cout << "xx同学" << s2.getAge() << "岁,总分:" << s2.getS() << endl;
    return 0;
}
//输出的结果是:
xx同学13岁,总分:165
xx同学14岁,总分:170

关于以上代码我想请教:
1. 为什么可以Student s1, s2, .... ; 为什么可以定义无数个s1, s2, s3,...是怎样实现的呢,Student在内存中是一个地址吗?如果Student这个类名是一个地址,那么是s1,s2指向了这个地址还是Student这个地址指向了s1,s2呢?
2. 不管是指针还是引用,我们常常会说到"指向"这个词,那么在内存中是如何实现"指向"的呢,两个不同的内存地址0x0011 0x0022 是怎么关联起来的,怎么互相指向的
3. 我们可以直接给 s1.age属性赋值的方式来修改age,为什么有的时候还要再写一个getAge()的成员函数呢,不是多此一举吗?
4. 有时候我会觉得,一个变量(变量可以是各种各样的类型)或者一个数值字面量,在内存中可以传来传去真的挺神奇,也很好玩,但是有时候也会被搞得很乱,一会儿是传值,一会儿是传地址
    到底哪种情况传值哪种情况传地址,有没有一些好的分辨技巧,还是说就死记硬背呢?这个跟编译器设计的语法有关系吗?
5. 我在自学编程的时候也一直想搞清楚计算机最底层的东西,后来我了解了一些知识: 晶体管可以组成触发器,这些触发器可以组合成加法器或者减法器之类,它们可以实现最基础的算法,比如加减法,而乘除法呢又可以通过加减运算来转换,乘法做两次循环运算呢就可以实现平方运算,就这样,一直迭代,就可以组合成一个功能比较强大的计算器了,如果计算机的一切操作皆运算,那么封装功能又是如何实现的呢,不光是封装继承功能,编程语言里面还有许多奇奇怪怪的功能,难道这也只是晶体管的减法器减法器就能模拟出来的吗?是不是cpu里面不光有晶体管,还有其它的什么东西呢?
6. 我们的编程语言是不是可以理解为: cpu指令集的高级扩展呢? 假如说cpu有一百多条指令集,我们把这些指令集互相组合迭代,然后把组合好的具有特定功能的这些指令集封装成一个函数或者一个命令(本质是2进制数,只不过编译器帮我们翻译成了人能看懂的语言),这些东西是不是就是我们常说的各种编程语言c/c++/java/python等等呢?
7. 如果操作系统是根据cpu指令集发展而来的,那是不是说只要cpu的指令集和一个操作系统兼容,那么不管这个cpu是谁造的都可以运行这个操作系统,在操作系统上运行一样的程序呢?
8. cpu的指令集是刻在cpu上的还是存储在寄存器里面的呢?我们可以去修改指令集吗?如何查看cpu的每一条指令集的详细信息呢(包含说明和用法文档)?

[此贴子已经被作者于2018-7-30 21:23编辑过]

搜索更多相关主题的帖子: Student int age cpu 指令 
2018-07-30 21:07
Jonny0201
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:52
帖 子:488
专家分:2603
注 册:2016-11-7
得分:10 
1. Student s1, s2 就相当于 int i1, i2
2. 指向就是指针指向的地址, 一般用一个变量来保存一个地址的, 比如
void *p = ::operator new(static_cast<size_t>(8));
p 对应的就是那个刚申请的地址
但是本身 p 要花费一些空间, 而且指针本身直接用也比较危险
3. 如果你把第一个 public 改成 private, 你看看还能直接赋值吗
4. 传值一般是把一个变量的值复制给另外一个变量, 传地址就是传指针, 当然也可以传引用
对于比较小的结构体, 一般是传值, 比如 int char 等等, 如果是自定的或者 STL 的容器, 一般就是传地址或者传引用
5/6/7/8 汇编、计算机系统、数电、模电自行查询资料
不过第六点, 编译器做的事情是将我们写的代码翻译成汇编
我们现在用的语言, 不管是高级语言还是中级语言, 都是对汇编的封装. 高级语言甚至是对中级语言的封装
举个例子, C 是对汇编的封装, Python、PHP 是对 C 的封装
Java 不太清楚, 不过应该是 C++ 写的
讲的有错请包容
2018-07-31 23:22



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488913-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.322607 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved