关于几个C++的基本问题,答者有分!!!

时间:2022-09-02 20:04:08
本人C++基础较差,买了一本C++编程思想,结果看的我是腾云驾雾,我都快晕死了。请大家帮忙,帮我解释几个问题!!!
1。函数体内的静态对象是必须通过构造函数来初始化么???
2。名字控件的具体作用,能给个源码让我看看么???
3。用static声明的对象或函数是属于内部连接么???在C++中,内部连接和外部连接有什么区别???
4。为什么静态成员函数不能访问一般的数据成员???
5。谁能给我介绍一下拷贝构造函数,我看书没看懂!!!
6。什么叫做常量折叠???
希望大家告诉我,答者有分!!!

11 个解决方案

#1


1. 
静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:  <数据类型><类名>::<静态数据成员名>=<值>
这表明:
  (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
  (2) 初始化时不加该成员的访问权限控制符private,public等。
  (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

#2


2
名字空间(namespace): 定义一个名字空间,然后使用unsing就可以将当前的类型上下文转换名字空间所定地的.

namespace math

{

       enum sign{positive, negative};

       class integer{

       int i;

       sign s;

       public:

       interger(int I=0): i(i) {………}

       sign Sign() {………}

       …………………..   

       };//end class

interger A, B, C;

interger divide(interger, interger);

}//no ;



void q()

{

       using namespace math;

interger A; //hides math::A

A.Sign(negative);

Math::A.Sign(positive);

}

#3


看中文版的《C++编程思想》不看得腾云驾雾才怪呢。再说这也不是一本初学者看的书啊。

#4


内部连接?事不是内置函数?inline?
inline效率高一些,但是代码加长了

#5


3.
  如果一个函数在实现它的文件外未被使用的话,把它声明为静态的(static)以强制使用内部连接。否则,默认的情况下会把函数定义为外部连接。
5.
拷贝构造函数:当行参和实参结合时,如果是复杂对象的传值类型,则调用拷贝构造函数生成一个临时对象作为实参,退出函数时,临时对象被调用析构函数释放。当返回值是复杂对象是,也是调用拷贝构造函数来赋值。这就出现构造函数和析构函数被调用次数不相等的情况。拷贝构造函数的原型为A(A&),我们可在类中重载。(缺省的拷贝构造函数是使用位(bit)拷贝方法:浅层拷贝,不拷贝指针指向的内容)。

#6


3.
  如果一个函数在实现它的文件外未被使用的话,把它声明为静态的(static)以强制使用内部连接。否则,默认的情况下会把函数定义为外部连接。
5.
拷贝构造函数:当行参和实参结合时,如果是复杂对象的传值类型,则调用拷贝构造函数生成一个临时对象作为实参,退出函数时,临时对象被调用析构函数释放。当返回值是复杂对象是,也是调用拷贝构造函数来赋值。这就出现构造函数和析构函数被调用次数不相等的情况。拷贝构造函数的原型为A(A&),我们可在类中重载。(缺省的拷贝构造函数是使用位(bit)拷贝方法:浅层拷贝,不拷贝指针指向的内容)。

#7


up

#8


up

#9


下次来看,hoho

#10


up

#11


up||||||||||~~~~~~~~~~```

#1


1. 
静态成员初始化与一般数据成员初始化不同。静态数据成员初始化的格式如下:  <数据类型><类名>::<静态数据成员名>=<值>
这表明:
  (1) 初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。
  (2) 初始化时不加该成员的访问权限控制符private,public等。
  (3) 初始化时使用作用域运算符来标明它所属类,因此,静态数据成员是类的成员,而不是对象的成员。

#2


2
名字空间(namespace): 定义一个名字空间,然后使用unsing就可以将当前的类型上下文转换名字空间所定地的.

namespace math

{

       enum sign{positive, negative};

       class integer{

       int i;

       sign s;

       public:

       interger(int I=0): i(i) {………}

       sign Sign() {………}

       …………………..   

       };//end class

interger A, B, C;

interger divide(interger, interger);

}//no ;



void q()

{

       using namespace math;

interger A; //hides math::A

A.Sign(negative);

Math::A.Sign(positive);

}

#3


看中文版的《C++编程思想》不看得腾云驾雾才怪呢。再说这也不是一本初学者看的书啊。

#4


内部连接?事不是内置函数?inline?
inline效率高一些,但是代码加长了

#5


3.
  如果一个函数在实现它的文件外未被使用的话,把它声明为静态的(static)以强制使用内部连接。否则,默认的情况下会把函数定义为外部连接。
5.
拷贝构造函数:当行参和实参结合时,如果是复杂对象的传值类型,则调用拷贝构造函数生成一个临时对象作为实参,退出函数时,临时对象被调用析构函数释放。当返回值是复杂对象是,也是调用拷贝构造函数来赋值。这就出现构造函数和析构函数被调用次数不相等的情况。拷贝构造函数的原型为A(A&),我们可在类中重载。(缺省的拷贝构造函数是使用位(bit)拷贝方法:浅层拷贝,不拷贝指针指向的内容)。

#6


3.
  如果一个函数在实现它的文件外未被使用的话,把它声明为静态的(static)以强制使用内部连接。否则,默认的情况下会把函数定义为外部连接。
5.
拷贝构造函数:当行参和实参结合时,如果是复杂对象的传值类型,则调用拷贝构造函数生成一个临时对象作为实参,退出函数时,临时对象被调用析构函数释放。当返回值是复杂对象是,也是调用拷贝构造函数来赋值。这就出现构造函数和析构函数被调用次数不相等的情况。拷贝构造函数的原型为A(A&),我们可在类中重载。(缺省的拷贝构造函数是使用位(bit)拷贝方法:浅层拷贝,不拷贝指针指向的内容)。

#7


up

#8


up

#9


下次来看,hoho

#10


up

#11


up||||||||||~~~~~~~~~~```